1

他の人たちと同じように、私はモバイル ブラウザで実行されている JavaScript コードと phonegap webuiview で実行されている JavaScript コードの違いを見分けようとしています。標準的な解決策は、イベントが発生するのを待つことです。devicereadyイベントが発生すると、phonegap にいることがわかるからです。しかし、どのくらい待ちますか?

ユーザーに座って待ってほしくないので、できるだけ早く実行したいコードがあります。しかし、初期化する場合は、phonegap が初期化される前に実行したくありません。私が探しているのはdevicenotready、aftercordova.jsコードが実行され、アタッチするものがないと判断されたときに発生するイベントのようなものです。または、コードバがまだロードされていることと、コードバがロードをあきらめたこととの違いを知るためにポーリングできるいくつかの変数。違いはありますか?

私はこの解決策が嫌いですが、これは私が思いついた最高のものです。これより良いものがあれば教えてください:

function whenLoaded(callback,timeout) {
    var when_loaded_needs_running = true;
    document.addEventListener('deviceready', function() {
        if( when_loaded_needs_running ) {
            when_loaded_needs_running = false;
            callback();
        } else {
            console.log("deviceready fired too late. whenLoaded already ran.");
        }
    });
    window.setTimeout(function() {
        if( when_loaded_needs_running ) {
            when_loaded_needs_running = false;
            console.log("deviceready didn't fire after "+timeout+"ms. running whenLoaded anyway.");
            callback();
        }
    }, timeout);
}
4

1 に答える 1

2

より簡単なテストは、JavaScriptグローバルが利用可能かどうかを確認することcordovaです。イベントを待つ必要はなく、すぐに実行できます(<script>cordova.jsが理論的にインクルードされた後に実行される限り)。実行しているPhoneGapのバージョンによっては、いくつかのグローバル変数の1つをテストする必要がある場合があります。

次のように単純にする必要があります。

if(cordova || Cordova || PhoneGap) {
  alert('hey im in a phonegap webview!');
} else {
  alert('regular old browser, aw shucks');
}
于 2012-06-05T01:31:21.523 に答える