[2.0-a133] AHK VS Javascript Safearray (WebView2)

Get help with using AutoHotkey (v2 or newer) and its commands and hotkeys
xroot
Posts: 40
Joined: 21 Jun 2019, 08:45

[2.0-a133] AHK VS Javascript Safearray (WebView2)

Post by xroot » 01 May 2021, 11:41

Pass a safearray in AHK to JavaScript works as is.

The safearray passed to Javascript:
arr := ComObjArray(VT_VARIANT:=12,3)
arr[0] := "AHK Date = " A_NOWUTC
arr[1] := "AHK Version = " A_AHKVersion
arr[2] := "OS Version = " A_OSVersion

JavaScript display of AHK safearray like any array: arr[0] arr[1] arr[2].

Passing a Javascript array to AHK you get nothing.
Type = ComObjArray
MaxIndex = Large Number (wrong)
SafeArrayGetDim = 68 (wrong)
ComObjType = 200C

Something from Javascript to AHK gets lost in translation.

Anybody know what might be going on with Javascript or AHK maybe WebView2.

Any OBJECT you send to AHK from Javascript comes back empty.
Like Arrays, Html objects (document,body,head, and jQuery objects).
String, integer, float all work OK.

Test SafeArray example:

Code: Select all

#include WebView2.ahk

Show_Data(){
    arr  := HostObj.oarr
    dim := DllCall("oleaut32\SafeArrayGetDim","ptr",ComObjValue(arr))
    msgbox "Type = " Type(arr) "`nMaxIndex = " arr.MaxIndex() "`nSafeArrayGetDim = " dim "`nComObjType = " Format("{:X}",ComObjType(arr))
}

NavStr := "
(
    <style>
        .swal-overlay{background-color:blue;}
        .swal-title{color:yellow;}
        .swal-modal{background-color:navy;border:3px solid yellow;}
        .swal-text{font-size:18px;background-color:navy;border:3px solid cyan;color:yellow;}
        .swal-button{color:yellow;border-radius:2px;background-color:navy;font-size:14px;border:2px solid cyan;}
    </style>
    <script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
    <body bgColor="blue" style="overflow:hidden">
)"

jsCode := "
(
    (async function Run_JS(){
        var iarr = await chrome.webview.hostObjects.AHK.getHostProperty("iarr");
        await swal("AHK Array To JavaScript",iarr[0]+"\n"+iarr[1]+"\n"+iarr[2],"info",{button:"See JavaScript Array In AHK"});

        var oarr = ["Js Date = "+(new Date().toString()),Math.PI,screen.width];
        await chrome.webview.hostObjects.AHK.setHostProperty("oarr",oarr);

        await chrome.webview.hostObjects.AHK.Display();

        await chrome.webview.hostObjects.AHK.iQuit();
    })();
)"

arr    := ComObjArray(VT_VARIANT:=12,3)
arr[0] := "AHK Date    = " A_NOWUTC
arr[1] := "AHK Version = " A_AHKVersion
arr[2] := "OS Version  = " A_OSVersion

HostName := "AHK"
HostObj  := {iarr:arr,oarr:"",Display:Show_Data,iQuit:ExitApp}

win := Gui("-caption","WebView2 Testing")

WebView2_Init

win.Show "w" A_ScreenWidth/2 " h" A_ScreenHeight/2

Esc::ExitApp
WebView2
WebView2.zip
(1.62 KiB) Downloaded 43 times

Return to “Ask for Help (v2)”