坊主が上手にHatenaに坊主のコードを書いた

ITBOZEによるIT技術の備忘録ブログ

TypeError “Cannot set property connection of #<Navigator>のエラー回避方法

最近、LispHaskellだけでなく、OCamlにまで手を出してる。 完全に関数プログラミングにハマっとるやないかーい。

どもっ、ITBOZEです。

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行目あたり。

  1. platforms/android/assets/www/cordova.js
  2. 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));
      }
    }

同様の現象で困っている方、よかったら参考にしてみてください。

CordovaでのTypeError “Cannot set property connection of #<Navigator>エラー回避方法 - Qiita