我正在尝试从https://github.com/golang/go/wiki/WebAssembly扩展“ Hello WebAssembly”示例。如给定的那样,该示例仅将消息打印到控制台。我想使用syscall/js
添加一些代码来替换body元素的内容。
以下尝试无法建立:
package main
import (
"fmt"
"syscall/js"
)
func main() {
fmt.Println("Hello, WebAssembly!") // original example
// I added
doc := js.Global().Get("document")
body := doc.Call("getElementById", "thebody")
body.innerHTML = "Dynamic Content"
}
当我尝试使用$ env GOOS=js GOARCH=wasm go build -o main.wasm
进行构建时
我得到:
./wasm.go:14:6: body.innerHTML undefined (type js.Value has no field or method innerHTML)
考虑到这一点不足为奇,但是我在https://godoc.org/syscall/js的文档中看不到任何示例来说明如何获取和设置元素属性。
答案 0 :(得分:4)
要获取某个JavaScript对象的任何属性的值,请使用Value.Get()
方法(在通过调用js.Global().Get("document")
访问文档对象时实际上已经使用过它)。同样,要设置属性的值,请使用Value.Set()
。
要获取/设置其值的属性名称只是Go string
值,在您的情况下为"innerHTML"
。要设置的值可以是许多Go值(例如string
,整数,浮点数,bool
,切片,映射等),js.ValueOf()
函数用于获取最终设置的js.Value()
。就您而言,您可以简单地使用Go string
值"Dynamic Content"
。
doc := js.Global().Get("document")
body := doc.Call("getElementById", "thebody")
body.Set("innerHTML", "Dynamic Content")