Cordovaを使用したAndroidアプリ開発にて、Cordova自体のバグを回避する方法を会得したので、メモ。
まず、以下のエラーが発生。
TypeError “Cannot set property connection of #<Navigator>
上記エラーは、Android SDKのバージョンが、4.0.3以下で起きている。
また、タチの悪いことに、このエラーは、アプリの立ち上がりの際に発生するため、その後の処理が進まない。
で、詳しくエラーの原因を見ていると、以下のエラーメッセージが。。。
Uncaught TypeError: Cannot set property connection of # which has only a getter at file:///android_asset/www/cordova.js:512
これは、Cordova自体のバグで、自分のソースコードのバグではない。
そこで、とりあえず、以下のように、Try Catchで、エラーを回避する方法を採用し、事なきを得た。
対象は、以下の2ファイルの512行目あたり。
- platforms/android/assets/www/cordova.js
- platforms/android/platform_www/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));
}
}
同様の現象で困っている方、よかったら参考にしてみてください。