2

Android、BlackBerry、iphone、および Windows Phone 7 をサポートする電話ギャップ アプリケーションを開発しています。インターネット接続チェックは、Windows Phone 7 だけでは機能しません。プラットフォームごとに個別の cordova.js ファイルがあるため、これらのファイルを android、iphone などの対応する名前の異なるフォルダーに保持しています。アプリケーションが読み込まれるデバイスの種類に基づいて js ファイルを動的に読み込みます。アプリケーションはAndroidで実行されています。android/cordova.js を読み込んでいます。Windows Phoneを除くすべてのプラットフォームで問題なく動作しています。jsファイルを head タグに直接ロードすると、接続チェックが機能しますWindows Phone 7 では、js ファイルの動的なロードが機能していません。以下にコード スニペットを示します (ファイル パスは正しいです。確認済みです)。

<script type="text/javascript" charset="utf-8">
function test() {
    $('head').append('<script type="text/javascript" src="' + filePath + '"' + '></' + 'script>');
}
test();
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady(){                               
    offLineModeTest();
}           
function offLineModeTest(){
    try {
        var networkState = navigator.network.connection.type;
        if (Connection.NONE == networkState || Connection.UNKNOWN == networkState) {
            //do something......
        }
    }catch(err){

    }
}
</script>
4

2 に答える 2

1

これは、IEMobile でこのようにロードすると JavaScript が実行されないことが原因です。

これに対する修正はありませんが、OS の更新を待つか、Cordova が同じ js ファイルを使用するすべてのバージョンになるまで待ちます。

別の方法として、常に WP7 バージョンを含めてから、それを削除して、他のプラットフォームに適切なバージョンをロードすることもできます。

于 2012-05-31T09:48:15.257 に答える
1

Cordova の推奨事項は、常に HEAD タグに直接ロードし、ロードする最初のスクリプトとして使用することです。これを行わないと、特定のロード イベント自体にフックする必要があるため、イベントが正しく発生しないリスクがあります。

プラットフォーム固有の JS ファイルを動的にではなく相対パスを使用して静的にロードできるように、プロジェクトを構成してみませんか? これが、私が Android および iOS アプリに使用しているアプローチです。

編集

この回答は、JS ファイルのファイル構造と相対的なインクルードを示しています。

于 2012-05-31T10:18:31.143 に答える