PhoneGap应用使用Cordova InAppBrowser插件报错求助
这个错误我太熟了!好多刚用Cordova/PhoneGap的开发者都会踩这个坑,咱们一步步来排查解决:
1. 先解决最核心的问题:确保代码在deviceready事件后执行
Cordova的所有原生API(包括InAppBrowser)都必须等deviceready事件触发后才能调用——这是Cordova的核心规则!你现在直接在按钮的onclick里调用,大概率是页面加载完了,但Cordova还没初始化好,cordova对象根本还没生成,自然会报“undefined”的错误。
改法很简单:把点击逻辑放到deviceready监听里,同时删掉按钮的onclick属性:
<button type="button" class="btn btn-default btn-lg btn-block">SHOP</button> <script> document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { // 现在Cordova环境完全就绪了 const shopBtn = document.querySelector('.btn-block'); shopBtn.addEventListener('click', function() { // 这里可以安全调用InAppBrowser了,建议加上第三个参数配置(比如显示地址栏) cordova.InAppBrowser.open('http://jmu-nation.myshopify.com/', '_blank', 'location=yes'); }); } </script>
2. 确认插件真的安装到位了
别只说“导入项目”,得用命令行验证:
- 打开项目根目录,运行:
cordova plugin list - 如果输出里没有
cordova-plugin-inappbrowser,就重新安装:cordova plugin add cordova-plugin-inappbrowser - 注意:PhoneGap本质就是包装后的Cordova,所以用Cordova命令行操作完全没问题
3. 浏览器模拟器的坑:别用普通Chrome模拟器测试
普通的Chrome浏览器模拟器(F12那个)不支持原生Cordova插件,因为InAppBrowser依赖原生WebView实现,浏览器环境里根本没有这个模块。如果你要在浏览器里测试,得用Cordova官方的浏览器平台:
- 先添加平台:
cordova platform add browser - 然后启动项目:
cordova run browser
这样启动的是Cordova封装的浏览器环境,才能正确加载插件并测试。
4. iOS设备上的额外检查
如果上面几步都搞定了,iOS还是不行,再检查这几点:
- 确认iOS平台已添加并重新构建:运行
cordova platform add ios(如果没加的话),然后cordova build ios - 打开项目的
config.xml,添加域名访问权限:
<allow-navigation href="http://jmu-nation.myshopify.com/*" /> <allow-intent href="http://*/*" /> <allow-intent href="https://*/*" />
- 打开Xcode里的项目,看看
Plugins文件夹下有没有CDVInAppBrowser.m和CDVInAppBrowser.h文件,如果没有,说明插件没正确注入,重新安装插件后再构建iOS项目。
内容的提问来源于stack exchange,提问作者Roger99
相关产品推荐
相关产品推荐

