5

アプリが phonegap で実行されているか、単に JavaScript を使用したモバイル/デスクトップ ブラウザー内で実行されているかを検出する最も効率的で信頼できる方法は何ですか? phonegap アプリを任意のブラウザー (デスクトップまたはモバイル) でテスト/デバッグすることを妨げる問題を排除し、アプリ用の真にユニバーサルなコード ベースを作成しようとしています。

次のような phonegap 固有の呼び出しで関数を構造化するつもりです。

if (phonegapisrunning) {
    // phonegap specific javascript calls here
}
else {
    // standard javascript calls here
}

解決策を探しているときに、このスレッドに出くわしました: PhoneGap: Detect if running on desktop browser

このスレッドではこの問題について説明していますが、どの方法が最も効率的で信頼性が高いかについての明確な答えはわかりません。onDeviceReady() イベントにバインドする必要がありますか? window.device を確認する必要がありますか? アプリが JavasScript を介して phonegap で実行されているかどうかを確認する、より効率的または信頼できる方法はありますか?

そして、Ripple Chrome プラグインについて言及しているこのスレッド: 通常のデスクトップ ブラウザーでの Phonegap Web アプリ

Ripple ツールは、テスト用の貴重なツールになりそうです。しかし、プラグインなしでデスクトップ ブラウザーで phonegap アプリを実行しようとしています。

アプリが phonegap で実行されていないと判断された場合は、ユーザー エージェント スニッフィングを使用して、ブラウザーがデスクトップかモバイルかを判断し、必要に応じてコードをさらに分離します。

4

4 に答える 4

3

ユーザー エージェントのチェックに関する多くの回答を見てきました。これらは、ページが読み込まれたプラットフォームを比較するのに役立ちますが、コルドバ アプリのブラウザー内で実行されているか、通常の Web ブラウザー内で実行されているかを区別することはできません。android cordova javascript ファイルをいろいろ調べてみたところ、cordova アプリで実行すると次の変数が設定されていることがわかりました。

window._cordovaNative

ios cordova javascript を調べたところ、次のことがわかりました。

window._nativeReady

コルドバ JavaScript をロードしたり、ユーザー エージェントをチェックしたりする前に、これらのアラートをページにスローし、Web ブラウザからのロードと動的コンテンツを取得するコルドバ アプリからのロードの結果を比較します。

alert("Android: " + window._cordovaNative);
alert("iOS: " + window._nativeReady);

他のデバイスの phonegap ファイルにはさまざまなグローバル変数があると思いますが、今のところ、これでうまくいきます。うまくいくことを願っています。

于 2013-10-25T05:26:22.463 に答える
2

私の提案は、onDeviceReady Phonegap 呼び出しの外で JavaScript 関数を作成/呼び出すことです。

または、Cordova / Phonegap のどのバージョンが実行されているかを確認してください。

var string = device.cordova; // or device.phonegap

if (string == null) {
  //do non phonegappy stuff here
} else {
  //do phonegappy stuff
}
于 2012-07-01T23:47:37.937 に答える
1

最もクリーンな解決策ではないかもしれませんが、シンプルで信頼できる方法は、deviceready でグローバル変数を作成/設定することです。

var isCordovaReady = true;

それで:

if (isCordovaReady) {
    // do cordova/phonegap stuff
}
else {
    // do non cordova/phonegap stuff here
}
于 2014-11-24T22:19:29.600 に答える