TypeError «Не удается установить соединение свойств # <Navigator>» в консоли при обновлении проекта до последней версии Cordova 4.0.0

Сегодня я обновил Cordova-CLI с версии 3.5 до версии 4.0. После этого я обновил поддержку платформы проекта до последней версии Android (так как теперь они обновляются отдельно).

С тех пор я получаю эту ошибку, cordova run android когда я cordova run android , и я получаю следующую ошибку:

Uncaught TypeError: Невозможно установить соединение свойств #, которое имеет только геттер в файле: ///android_asset/www/cordova.js: 512

В результате многие события в приложении не запускаются, что приводит к тому, что приложение не работает.

Solutions Collecting From Web of "TypeError «Не удается установить соединение свойств # <Navigator>» в консоли при обновлении проекта до последней версии Cordova 4.0.0"

Я встретил ту же проблему с Android cordova 3.6.4, полученным через CLI 4.1.2. Я попытался объединить две проблемы: 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) отсутствует. Но я не пытался, если связанные плагины могут работать не так. Это означает, что я не знаю, правильно ли исправление или нет.

Кроме того, я получил cordova 3.7.0 через CLI 4.1.2 для платформы IOS. Я вижу, что исправление https://github.com/apache/cordova-js/pull/88 было применено к 3.7.0 JS. Но, функция, clobber, все еще не выше фиксации. Кроме того, нет 3.7.0 для Android cordova. Это все еще 3,6,4 для платформы Android.

Я начал получать это после обновления Кордовы, но только на очень старых телефонах Android. В качестве обходного пути я поставил блок try / catch вокруг содержимого функции, генерирующей ошибку (clobber) в cordova.js:


     Функция clobber (obj, key, value) {
       пытаться {
         Export.replaceHookForTesting (obj, key);
         Obj [ключ] = значение;
         // Геттеры могут быть переопределены только геттерами.
         If (obj [ключ]! == значение) {
             Utils.defineGetter (obj, key, function () {
                 Возвращаемое значение;
             });
         }
       }
       Catch (e) {
         Console.error ('clobber error' + e + ', obj =' + JSON.stringify (obj) + ', key =' + JSON.stringify (key) + ', value =' + JSON.stringify (value));
       }
     }

Это, очевидно, не лучшее исправление, но, по крайней мере, оно позволяет завершить инициализацию и, похоже, не влияет на мое приложение.

Согласно этому сообщению , проблема исправлена.

Кстати, я должен сказать вам, что я выполнил все команды, чтобы обновить проект Cordova для платформы Android, но я не могу получить обновление cordova.js до версии 3.7.2.

У меня такая же проблема. Чтобы решить эту проблему, я сравнил старую версию «cordova.js» и удалил строки с 1187 по 1196 и с 1316 по 1325. Эти строки являются «else {}» частью функции «replaceNavigator ()». Теперь он работает для моего приложения.