2014-10-20 5 views
7

Dzisiaj zaktualizowałem Cordova-CLI z wersji 3.5 do wersji 4.0. Następnie zaktualizowałem obsługę platformy projektu do najnowszej wersji Androida (ponieważ teraz są one aktualizowane osobno).TypeError "Nie można ustawić połączenia właściwości # <Navigator>" w konsoli podczas aktualizacji projektu do najnowszej wersji Cordova 4.0.0

Od tamtej pory, mam ten błąd pokazuje się, gdy biegnę cordova run android, pojawia się następujący błąd:

Uncaught TypeError: Cannot set property connection of # which has only a getter at file:///android_asset/www/cordova.js:512

W rezultacie, wiele zdarzeń w aplikacji nie dostać przebieg, powodując ta aplikacja nie działa.

+0

Może to być błąd związany z wtyczką sieciową: https://issues.apache.org/jira/browse/CB-7848 W międzyczasie zastosowałem się do sugestii Johna. – th3hamm0r

+1

powiązany problem to: https://issues.apache.org/jira/browse/CB-7868 – mwager

Odpowiedz

3

Spotkałem ten sam problem z Androidem cordova 3.6.4 dostałem się przez CLI 4.1.2. Próbowałem połączyć dwa poprawki problemu: CB-7868. Pierwsze mocowanie można wykonać za pomocą łącza CB-7868, https://github.com/apache/cordova-js/pull/88. Drugie ustalenie dotyczy komentarza na temat CB-7868.

Zobacz *************

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; } 
); 

z tymi dwoma mocowania. Nie zgłoszono żadnego błędu w Android API14 (4.0) i API15 (4.0.3). Ale nie próbowałem, jeśli powiązane wtyczki mogą nie działać. Oznacza to, że nie wiem, czy naprawa jest właściwa, czy nie.

Mam również cordova 3.7.0 przez CLI 4.1.2 dla platformy IOS. Widzę, że poprawka, https://github.com/apache/cordova-js/pull/88, została zastosowana w 3.7.0 JS. Ale funkcja, clobber, wciąż nie jest powyżej ustalania. Ponadto nie ma dostępnego 3.7.0 dla systemu Android cordova. Wciąż jest 3.6.4 dla platformy Android.

+0

Do czasu wydania kolejnej wersji cordova-android jest to rozsądne rozwiązanie.Pierwszy adres URL łatki to https://github.com/apache/cordova-js/pull/88.patch, a druga łatka musi zostać zapisana w pliku łatki z adresu URL: https: // git-wip-us .apache.org/repos/asf? p = cordova-js.git; a = łatka; h = f0ceadf; hp = 91157c2e1bf3eb098c7e2ab31404e895ccb0df2a –

7

Zacząłem to robić po aktualizacji Cordova, ale tylko na bardzo starych telefonach z Androidem. Jako obejście umieścić blok try/catch wokół treści funkcji generującej błąd (sprać) w cordova.js:

 

    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)); 
     } 
    } 

To oczywiście nie jest najlepszym fix ale przynajmniej pozwala inicjalizacji kompletny i wydaje się, że nie wpływa to na moją aplikację.

+0

Przypuszczam, że jest to po prostu niezgłoszony błąd, który zostanie naprawiony w najnowszej wersji. Interesujące, że dzieje się tak tylko ze starymi urządzeniami. Nasz tablet aplikacji dla Androida uruchamia Androida 4.0.3. –

+1

jak edytować 'cordova.js' bez jego zamiany na kompilację? – mwager

+1

Wygląda na to, że powinieneś edytować kopię pliku Cordova.js w folderze ~/platforms/android/platform_www. Próbowałem tego i podążając za cordova przygotuj androida zmiany pokazane w wersji www ~/platforms/android/assets/www. –

0

Mam ten sam problem. Aby go rozwiązać, porównałem ze starą wersją "cordova.js" i usunąłem linie 1187 do 1196 i 1316 do 1325. Te linie są "else {}" częścią funkcji "replaceNavigator()". Działa teraz dla mojej aplikacji.

1

Zgodnie z tym post, problem został rozwiązany.

Przy okazji, muszę powiedzieć, że uruchomiłem wszystkie polecenia, aby zaktualizować projekt Cordova dla platformy Android, ale nie mogę uzyskać aktualizacji cordova.js do wersji 3.7.2.

+0

Nie możesz, AFAIK, chyba że zostanie oficjalnie wydany. Ta strona [https://github.com/apache/cordova-android/blob/master/RELEASENOTES.md] pokazuje, że wydana wersja wciąż jest 3.6.4. –

Powiązane problemy