4

Durandal を使用して SPA を構築しましたが、すべてブラウザーで正常に動作します。私が今やろうとしているのは、Phonegap (理想的には Phonegap Build を使用) でラップし、Android アプリとしてデプロイすることです。

この件に関するデュランダルのドキュメント ( http://durandaljs.com/documentation/Native-Apps-With-PhoneGap-Cordova/ ) はかなりまばらです。アプリを最適化して main-built.js ファイルを生成する重要なポイントは、js/css アセットを 1 か所に集めるのと同じように行われました。

device readyただし、Phonegap/Cordova に 1 つではなくイベントがあることについては何も言及されていませんdocument ready。指示に従ってアプリをパッケージ化しました。私の Android デバイスには問題なくインストールできますが、スプラッシュ画面で動かなくなります。スプラッシュ画面でスタックすることについて他の質問が寄せられていますが、そこに投稿された解決策は役に立ちません。ここに何か根本的なものが欠けていると思わずにはいられませんか?!?

index.html に Phonegap 固有のコードが必要ですか? 任意のJavaScriptで?

注: 私は Durandal 1.2 を使用していますが、同じ質問が v2.0 にも当てはまります。

4

3 に答える 3

7

main.js の Phonegap デバイスの準備完了イベントにフックできます。これにより、シェルまたはビューのアクティブ化イベントが発生する前に、デバイスの準備が整っていることを確認できます。この例では、エージェントをチェックして、ブラウザで起動するようにします。これは、Durandal 2 / Phonegap Build プロジェクトの例です。

https://github.com/BenSinnott/LandmarkTracker


define(['durandal/app', 'durandal/viewLocator', 'durandal/system'], boot);

function boot(app, viewLocator, system) {
    var useragent = navigator.userAgent.toLowerCase();
    if (useragent.match(/android/) || useragent.match(/iphone/) || useragent.match(/ipad/) || useragent.match('ios') || useragent.match('Windows Phone') || useragent.match('iemobile')) {
        document.addEventListener('deviceready', onDeviceReady, false);
    }
    else {
        onDeviceReady();
    }

    function onDeviceReady() {
        app.title = 'Landmark Tracker';

        app.configurePlugins({
            router: true
        });

        app.start().then(function () {
            viewLocator.useConvention();
            app.setRoot('viewmodels/shell', 'entrance');
        });
    }
}

于 2014-01-30T10:33:37.490 に答える
2

ただし、ドキュメントの準備が整ったイベントではなく、デバイスの準備が整ったイベントを持つ Phonegap/Cordova については何も言及されていません。

jQuery はドキュメントの準備完了をリッスンできます$(document).readyが、HTML/javascript 自体にはドキュメント準備完了イベントがありません。純粋な JavaScript に最も近いものは、DOMContentLoadedイベントをリッスンすることです。Phonegap/Cordova は、ここに記載されているように、デバイスの準備完了イベントを提供します。必ずタグに含め<script type="text/javascript" charset="utf-8" src="cordova.js"></script>てください。<head></head>

私の Android デバイスには問題なくインストールできますが、スプラッシュ画面で動かなくなります。

config.xml を見てください。<preference name="splash-screen-duration" value="xxxx"/>xxxx が非常に高い数値に設定されている場所はありますか?

デバイスの準備完了後にいつでも呼び出すことができnavigator.splashscreen.hide()ますが、deviceready listiner を組み込む必要があります。上記で提供したドキュメントを使用して簡単に実行できます。それでも問題が解決しない場合は、コードの一部を調べて、何が起こっているのかを調べる必要があります。

于 2013-10-22T10:52:58.433 に答える
1

まず、非縮小版を試してください。すべてのフォルダーをアセットフォルダーにコピーすることを意味します。次に、logcat を見てください。ほとんどの場合、js エラーが発生しました。それが機能する場合は、縮小版を試して、logcat を介してエラーがスローされるかどうかを確認します

編集:これはもちろん、オンラインサービスではなく、Androidでの手動ビルドにのみ適用されます。私が覚えている限り、IOS の場合、出力ウィンドウにエラーが表示されます。

于 2013-10-22T19:54:51.557 に答える