TypeError在将项目升级到最新版本的Cordova 4.0.0时,无法在控制台中设置#<Navigator>的属性连接

今天,我将Cordova-CLI从版本3.5升级到版本4.0。 在此之后,我更新了一个项目的平台支持Android的最新版本(因为他们现在单独更新)。

自那时以来,我得到这个错误显示,每当我运行cordova run android ,我得到以下错误:

Uncaught TypeError:无法设置#只有getter的文件的属性连接:///android_asset/www/cordova.js:512

因此,应用程序中的很多事件不会运行,导致该应用程序无法正常工作。

Solutions Collecting From Web of "TypeError在将项目升级到最新版本的Cordova 4.0.0时,无法在控制台中设置#<Navigator>的属性连接"

我遇到了与通过CLI 4.1.2获得的Android cordova 3.6.4相同的问题。 我试图合并两个问题的修复:CB-7868。 第一次修复可以看到链接CB-7868, https://github.com/apache/cordova-js/pull/88 。 第二次修正是对CB-7868的评论。

请参阅*************

 function clobber(obj, key, value) { exports.replaceHookForTesting(obj, key); obj[key] = value; var needsProperty = false; try { obj[key] = value; } catch (e) { needsProperty = true; } // Getters can only be overridden by getters. if (obj[key] !== value) { if (needsProperty || obj[key] !== value) { utils.defineGetter(obj, key, function() { return value; } ); 

有了这两个修复。 在Android API14(4.0)和API15(4.0.3)上没有报告错误。 但是,我没有尝试,如果相关的插件可以不工作。 这意味着我不知道修复是否正确。

另外,我通过CLI 4.1.2为IOS平台获得了cordova 3.7.0。 我可以看到修复, https://github.com/apache/cordova-js/pull/88 ,已应用于3.7.0 JS。 但是,function上,还是没有定论。 另外,Android Cordova没有3.7.0。 Android平台仍然是3.6.4。

更新cordova后,我开始得到这个,但只有在非常老的Android手机。 作为一种解决方法,我把一个try / catch块放在cordova.js中产生错误(clobber)的函数的内容中:


    函数clobber(obj,key,value){
      尝试{
         exports.replaceHookForTesting(obj,key);
         obj [key] = value;
         // Getters只能被getters覆盖。
         if(obj [key]!== value){
             utils.defineGetter(obj,key,function(){
                返回值;
             });
         }
       }
       catch(e){
         console.error('clobber error'+ e +',obj ='+ JSON.stringify(obj)+',key ='+ JSON.stringify(key)+',value ='+ JSON.stringify(value));
       }
     }

这显然不是最好的解决scheme,但至less它可以让初始化完成,似乎不会影响我的应用程序。

根据这个post ,这个问题已经确定了。

顺便说一句,我不得不告诉你,我运行了所有的命令来更新Android平台的Cordova项目,但是我无法将cordova.js更新到3.7.2版本。

我也有同样的问题。 为了解决这个问题,我将它与旧版本的“cordova.js”进行了比较,并删除了第1187至1196行和第1316至1325行。这些行是“replaceNavigator()”函数的“其他部分”。 它现在适用于我的应用程序。