簡體   English   中英

如何使用作用於 js.Value 的 Invoke 從 Go/WASM 調用 javascript 函數?

[英]How do I call a javascript function from Go/WASM using Invoke that acts upon a js.Value?

在切換到全屏模式之前,我需要檢查我的 Go WASM Canvas 項目是否支持全屏。 到目前為止,我有以下代碼:

var fullscreenFunc         js.Value
var fullscreenNotSupported bool

使用以下邏輯設置:

fullscreenFunc = app.Get("requestFullscreen")
if fullscreenFunc.IsUndefined() {
    fullscreenFunc = app.Get("mozRequestFullScreen")
    if fullscreenFunc.IsUndefined() {
        fullscreenFunc = app.Get("webkitRequestFullscreen")
        if fullscreenFunc.IsUndefined() {
            fullscreenFunc = app.Get("msRequestFullscreen")
            if fullscreenFunc.IsUndefined() {
                fullscreenNotSupported = true
                println("Fullscreen not supported")
            }
        }
    }
} 

我希望能夠使用 js.Invoke 調用正確的函數,但我看不出有辦法告訴 Invoke 應該在哪個對象上進行調用。 我的“應用程序”值被解釋為一個參數。

func Fullscreen(app js.Value) {
    if fullscreenNotSupported {
        return
    }
    fullscreenFunc.Invoke(app)
}

導致:

panic: JavaScript error: 'mozRequestFullScreen' called on an object that does not implement interface Element.

那么我認為我可以調用正確方法的唯一方法是不是存儲函數,而是存儲函數名稱的字符串,然后使用以下方法“調用”/“調用”它是否正確?

app.Call(fullscreenFunctionNameString)

感覺好像我誤解了 Invoke 的目的。 它僅用於 js.Global() 類型調用嗎?

[編輯] 使用“調用”,至少似乎可以在不必重復上述瀏覽器細節的情況下派生函數名稱:

fullscreenFunctionName = fullscreenFunc.Get("name").String()
app.Call(fullscreenFunctionNameString)

它沒有回答這個問題,但可能對試圖做同樣事情的人有所幫助。

調用的參數變成了它包裝的 javascript 函數的參數。 由於這些全屏功能不需要任何參數,我認為您可能只需要更改:

fullscreenFunc.Invoke(app)

到:

fullscreenFunc.Invoke()

...假設app在兩個地方都是相同的 JS 元素。 如果不是,您的Call解決方案可能是您最好的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM