iOS模拟器运行正常,Android端调用Nativescript-Webview-Interface emit时报错
解决NativeScript-Webview-Interface Android端emit/callJSFunction报错问题
你遇到的这个sdkVersion未定义错误,是插件Android端代码引用了错误的系统API导致的,下面给你几个针对性的解决方案:
1. 手动修复插件Android端代码(快速临时解决)
根据错误堆栈,问题出在node_modules/nativescript-webview-interface/index.android.js第78行,这里是插件代码错误引用了Android系统版本属性。你可以直接修改这段代码:
- 打开该文件,找到第78行附近的代码,应该是类似这样的写法:
if (android.os.Build.VERSION.sdkVersion >= 19) { // 相关逻辑代码 } - 将错误的
sdkVersion改成Android官方正确的属性名SDK_INT:if (android.os.Build.VERSION.SDK_INT >= 19) { // 相关逻辑代码 }
Android系统获取SDK版本的标准API是android.os.Build.VERSION.SDK_INT,插件里的错误写法才导致了TypeError: Cannot read property 'sdkVersion' of undefined。
2. 更新插件到最新版本
这个错误大概率是插件旧版本的已知bug,你可以尝试更新插件到最新版来解决:
npm install nativescript-webview-interface@latest --save
更新后检查index.android.js里的代码是否已经修复了sdkVersion的问题,若已修复就无需手动修改了。
3. 确保WebView加载完成后再调用emit
还要注意,必须在WebView完全加载完成后,再调用emit或callJSFunction方法。比如在Vue组件中,你可以监听WebView的loaded事件:
<WebView ref="webView" @loaded="initWebViewInterface" src="~/path/to/your/webpage.html" />
然后在事件回调中初始化WebViewInterface并执行后续操作:
initWebViewInterface() { this.webViewInterface = new WebViewInterface(this.$refs.webView.nativeView); // 在这里调用emit或callJSFunction }
4. 检查NativeScript版本兼容性
如果你的NativeScript版本较新(比如7.x及以上),要确认插件是否支持当前版本。若插件长时间未更新,可能存在兼容性问题,这种情况下可以考虑寻找替代插件,或者给该插件提交PR修复问题。
内容的提问来源于stack exchange,提问作者Suraj Bharti
相关产品推荐
相关产品推荐

