如何从 Wasm 调用外部 js 函数?
How to call an external js function from Wasm?
我正在尝试从 Wasm 调用 javascript 函数。
package main
import (
"syscall/js"
)
func main(){
var args []js.Value
// set args here...
js.Global().Get("document").Call("function", "myFunction").Set("args", args)
}
然后在 HTML 我会包括我的 javascript
<script src="./js/scripts.js"></script>
其中 js/script.js
包含:
function myFunction(args){
console.log(args);
}
如何从 Wasm 代码调用 myFunction?
我尝试了建议的解决方案,但出现语法错误。
args := js.ValueOf([]interface{"foo", 42})
v := js.Global().Call("myFunction", args)
fmt.Println(v)
终端看起来像
$ GOOS=js GOARCH=wasm go build -o ./ipickd.wasm ./wasm.go
# command-line-arguments
./wasm.go:44:33: syntax error: unexpected literal "foo", expecting method or interface name
您有一些错误:
- 函数的范围是
Global()
Set
用于在js.Value
上设置属性,如docs中所述,此处不需要
Call
根据 docs 将函数名称和参数作为参数
如果你想传递一个数组,[]js.Value
可能不会做你想做的事
你的代码应该是:
args := js.ValueOf([]interface{}{"foo", 42})
js.Global().Call("myFunction", args)
或者使用一行代码,让 Call
进行转换:
js.Global().Call("myFunction", []interface{}{"foo", "42"})
您可以参考 js.ValueOf 类型兼容性文档。
我正在尝试从 Wasm 调用 javascript 函数。
package main
import (
"syscall/js"
)
func main(){
var args []js.Value
// set args here...
js.Global().Get("document").Call("function", "myFunction").Set("args", args)
}
然后在 HTML 我会包括我的 javascript
<script src="./js/scripts.js"></script>
其中 js/script.js
包含:
function myFunction(args){
console.log(args);
}
如何从 Wasm 代码调用 myFunction?
我尝试了建议的解决方案,但出现语法错误。
args := js.ValueOf([]interface{"foo", 42})
v := js.Global().Call("myFunction", args)
fmt.Println(v)
终端看起来像
$ GOOS=js GOARCH=wasm go build -o ./ipickd.wasm ./wasm.go
# command-line-arguments
./wasm.go:44:33: syntax error: unexpected literal "foo", expecting method or interface name
您有一些错误:
- 函数的范围是
Global()
Set
用于在js.Value
上设置属性,如docs中所述,此处不需要Call
根据 docs 将函数名称和参数作为参数
如果你想传递一个数组,[]js.Value
可能不会做你想做的事
你的代码应该是:
args := js.ValueOf([]interface{}{"foo", 42})
js.Global().Call("myFunction", args)
或者使用一行代码,让 Call
进行转换:
js.Global().Call("myFunction", []interface{}{"foo", "42"})
您可以参考 js.ValueOf 类型兼容性文档。