使用GopherJS获取Cordova设备信息字段为空的解决方法
解决GopherJS读取Cordova设备信息字段为空的问题
我之前也碰到过这个问题,折腾了好一会儿才搞明白根源——主要是Cordova API的调用时机不对,再加上对GopherJS绑定JS对象的细节没把握好,下面一步步帮你搞定:
1. 核心问题:必须等deviceready事件触发
Cordova的所有原生API(包括device对象)都要等deviceready事件触发后才能正常工作。如果你在页面加载完成就直接去获取device,此时Cordova还没完成初始化,拿到的自然是空字段。
2. 修正后的代码实现
你的结构体定义本身是没问题的,但要把获取device的逻辑放到deviceready的回调里,另外可以加个直接调用JS属性的方式来验证绑定是否正常:
package main import ( "fmt" "github.com/gopherjs/gopherjs/js" ) type Info struct { *js.Object Cordova string `js:"cordova"` Model string `js:"model"` Platform string `js:"platform"` Serial string `js:"serial"` UUID string `js:"uuid"` Version string `js:"version"` } func main() { // 监听deviceready事件,这是Cordova应用的标准初始化流程 js.Global.Get("document").Call("addEventListener", "deviceready", func() { // 此时device对象已经完全初始化,可以安全访问 device := &Info{Object: js.Global.Get("device")} // 打印所有设备信息 fmt.Println("Cordova版本:", device.Cordova) fmt.Println("设备型号:", device.Model) fmt.Println("运行平台:", device.Platform) fmt.Println("设备序列号:", device.Serial) fmt.Println("设备UUID:", device.UUID) fmt.Println("系统版本:", device.Version) // 也可以直接通过JS对象获取属性,用来验证GopherJS的绑定是否正常 fmt.Println("直接获取UUID(JS方式):", js.Global.Get("device").Get("uuid").String()) }, false) }
额外排查点
- 先确认插件真的装好了:执行
cordova plugin list,看看cordova-plugin-device是不是在列表里。 - 打开浏览器开发者工具的控制台,看看有没有Cordova相关的报错,比如插件加载失败的提示。
- 有些字段(比如Serial)在iOS上需要额外配置权限,或者部分平台本身不支持,要是这个字段为空,先查对应平台的文档确认。
内容的提问来源于stack exchange,提问作者Ralph
相关产品推荐
相关产品推荐

