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

Jos*_*ath 7 javascript android cordova

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

从那时起,每次运行时都会出现此错误cordova run android,我收到以下错误:

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

因此,应用程序中的许多事件都无法运行,导致该应用程序无法运行.

Joh*_*all 7

我在更新Cordova后开始使用此功能,但仅限于非常旧的Android手机.作为一种解决方法,我在函数的内容周围放置一个try/catch块,在cordova.js中生成错误(clobber):


    function clobber(obj, key, value) {
      try {
        exports.replaceHookForTesting(obj, key);
        obj[key] = value;
        // Getters can only be overridden by getters.
        if (obj[key] !== value) {
            utils.defineGetter(obj, key, function() {
                return value;
            });
        }
      }
      catch (e){
        console.error('clobber error '+e+', obj='+JSON.stringify(obj)+', key='+JSON.stringify(key)+', value='+JSON.stringify(value));
      }
    }

这显然不是最好的修复,但至少它让初始化完成,似乎不会影响我的应用程序.


Joe*_*Joe 3

我通过 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; }
 );
Run Code Online (Sandbox Code Playgroud)

有了这两个固定。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。但是,功能,搞砸了,还没有上面修复。此外,Android cordova 没有可用的 3.7.0。Android平台仍然是3.6.4。