[英]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.