问题描述
在切换到全屏模式之前,我需要使用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应该在哪个对象上进行调用的方法。我的“ app”值被解释为参数。
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()类型调用吗?
[edit]使用“调用”,至少似乎有可能无需重复上述浏览器详细信息即可得出函数名称:
fullscreenFunctionName = fullscreenFunc.Get("name").String()
app.Call(fullscreenFunctionNameString)
它不能回答问题,但可能对尝试这样做的人有所帮助。
解决方法
要调用的参数变为它包装的javascript函数的参数。由于这些全屏功能不需要任何参数,因此我认为您可能只需要更改:
fullscreenFunc.Invoke(app)
收件人:
fullscreenFunc.Invoke()
...假设app
在两个地方都是相同的JS元素。如果不是这样,您的Call
解决方案可能是您最好的选择。