Cordova自定义插件TypeError: cordova.exec is not a function
前言这个坑很少有人遇到,墙内墙外都找了不少资料看,几乎没看到同样的问题~_~背景项目有一个需求,结合Cordova和vue开发一个应用,app在离线的情况下启动时,需要首先去加载指定目录的文件读取数据,考虑到Android 6.0后权限时运行时申请赋予的,要加载文件肯定涉及文件存储的操作,所以依葫芦画瓢自定义了个插件(Cordova自定义插件 摸我),在...
前言
这个坑很少有人遇到,墙内墙外都找了不少资料看,几乎没看到同样的问题~_~
背景
项目有一个需求,结合Cordova和vue开发一个应用,app在离线的情况下启动时,需要首先去加载指定目录的文件读取数据,考虑到Android 6.0后权限时运行时申请赋予的,要加载文件肯定涉及文件存储的操作,所以依葫芦画瓢自定义了个插件(Cordova自定义插件 摸我),在js端访问权限授权的情况。
复盘
先贴我的代码 ,这是js侧访问权限的代码,Android原生的插件已确认没有问题
cordova.exec(success =>{
if ('success' == success) {
this.initData()
}else{
this.$toast('请先开启手机存储权限');
setTimeout(()=>{
this.requestPerimission()
},100)
}
}, fail =>{
}, "FileHandler", "requestpermission", [""]);
再看错误日志
D/SystemWebChromeClient: file:///android_asset/www/static/js/vendor.04fb6f8bbd2e524de801.js: Line 12 : TypeError: cordova.exec is not a function
03-20 16:57:43.558 18085-18085/com.boil.csg I/chromium: [INFO:CONSOLE(12)] "TypeError: cordova.exec is not a function", source: file:///android_asset/www/static/js/vendor.04fb6f8bbd2e524de801.js (12)
D/NetworkManager: toLower : wifi
D/NetworkManager: wifi : wifi
Connection Type: wifi
而这个问题在有的手机上会有,也有部分手机没有这个问题,这种问题神烦最难调,而且还有点赶时间,萌新的我一头扎进了百度,扎进了bing,扎进了stackFlow,哇靠就是没看到有人贴这个错误,真心在这上面废了好多时间,后面想想还是太年轻,缘木求鱼去了。
解决方案
cordova.exec is not a function,我花了大部分时间去看这个exec是不是不存在,忽略了Cordova这个家伙是否已经加载好了呢(Cordova 原理详解摸我摸我),验证了下果然...
为什么没有找到类似的问题呢,原因很简单,我在调用插件做事情的时候,Cordova还没有执行完毕,CordovaWebView还在做loadUrl的操作,Cordova.js应该没有被加载到,所以执行Cordova.exec就出问题了。还是自己的代码不严谨出的问题。
贴下最终解决的方案
document.addEventListener("deviceready", onDeviceReady =>{
//cordova.exec 执行操作
}, false);
更多推荐
所有评论(0)