2

オフライン Web アプリの使用を開始しています。オフラインのときに localstorage を使用して単純な abm を作成する小さなテスト アプリがあります。オンラインのとき、アプリはバックエンド言語として php を使用し、接続が戻ったときに localstorage と php を同期するという考えです。

現在、データを localstorage に保存するために使用される関数は、php にデータを送信するために使用される関数とは異なります。

動的に、1 つの JS ファイルをアンロードし (offline.js と呼びましょう)、別の JS ファイル (online.js) をロードすることは可能ですか?

それとも魔女がより良いアプローチでしょうか?すべての関数を 1 つのファイルに含めて、リスナーを動的に変更する必要がありますか?

4

4 に答える 4

3

ブラウザがオンラインかどうかをチェックする IF 条件を開始する関数ラッパーが必要です。

元:

function SaveData(data){
    if(BrowserIsOnline)
        SaveDataToPHPServer(data);
    else
        SaveDataToLocalStorage(data);

各関数本体を異なる方法で処理します。

于 2013-03-18T02:38:49.993 に答える
2

JavaScript ファイルをアンロードできません。ロードされると、常にロードされます。おそらく、デザインを少し再考する必要があります。

于 2013-03-18T02:44:12.453 に答える
1

最新のブラウザーでは、navigator.onLine を使用して接続を確認できます。仕様は次のとおりです: http://www.w3.org/TR/offline-webapps/

var connection = navigator.onLine;

if( connection ){
    //Do AJAX
}else{
    //Do Local Storage.
}
于 2013-03-18T02:42:54.070 に答える
0

ここに役立つ可能性のある解決策があります...

次のような、すべてのロジックが存在する関数の名前空間を用意します。

this.fn = {};
this.fn['save'] = function() {};
this.fn['load'] = function() {};

イベントが発生したら、次のように適切な関数を使用するだけです。

var fn = this.fn['load'];

また

var fn = this.fn['save'];

そして、通常どおり「fn」を使用します。

'online.js' や 'offline.js' のように、モジュールごとに関数を分離することもできます。各モジュールは同じ関数名を持ちますが、独自の名前空間にバインドされます。

関数を再リンクするときが来たら、次のようにするだけです。

this.fn['load'] = offlineModule.fn['load'];

すべての関数に名前がある場合 (例: 'load'、'save')、単純にループに含めることができます。

上記は、時々煩わしくなる可能性のある「if/else」条件分岐をすべて回避し、代わりに一種のパターンを使用しようとします。

しかし、とにかく素晴らしい質問です。私はプロジェクトの計画段階を開始しているので、あなたの質問で説明したものと同様のものが必要になるからです...これまでのところ、これが私が持っている最良の解決策です。基本的に、Linux での SO の動的リンク (一種) に触発されました。

于 2013-03-18T18:26:02.330 に答える