5

このアプリは、Apple App Store と Android マーケットに既に存在します。これは多くのネイティブ コードを使用するアプリであり、完全な html5ed の候補ではありません。

長ったらしい説明

Web ベースの一連の設定ページが必要です。これらのページの一部はモバイル デバイスにローカルに存在し、一部はリモート サーバーでホストされます。ネイティブ アプリは、javascript を使用して Web ページの情報を取得および設定するために、ローカル Web ページと通信する必要があります。

たとえば、WebView/UIWebview に表示される最初のページは、ローカル インデックス ページになります。リモート Web サイトがダウンしている場合、リモート ページへのインデックス ページのリンクはグレー表示されます。WebView の読み込み時に、ネイティブ アプリはそのページの到達可能性を検出し、javascript をページに送信してボタンをグレー表示にする必要があります。同様に、ローカル Web ページで行われた一部の設定変更は、処理のためにネイティブ アプリに送り返す必要があります。

短くて甘い要件のまとめ

  • リモートおよびローカルの Web ページを Web ビューに埋め込む
  • これらの Web ページは、Android と iOS の両方で同じです。
  • ローカル ページは JavaScript を使用して、ネイティブ モバイル アプリとの間でデータを取得および送信します。

考えられる解決方法

A.フォンギャップ

私のアプリケーションが完全に Web アプリである場合、Phonegap はこれにうまく機能することを認識しています。私の読書によると、Phonegap はパートタイムの仕事のためにネイティブ アプリに組み込まれることをあまり好まないようです。

何?あなたはそれが本当に簡単だと言いましたが、私はひどく誤解されていましたか? 賢明な方よ、教えてください。

B.ロール・マイ・オウン

私は独自のソリューションを展開することにオープンですが、Webviews から Native Apps への Javascript を介して情報を取得および設定する方法はかなり異なっているようです。設定よりも取得の方が重要です (iOS では偽の URL、Android では非常に優れた AddJavaScriptInterface)。また、このパスは、将来的に深刻なメンテナンスの頭痛の種になる可能性があるようです。

何だって?あなたの天才プログラマーの友人が、このプロセスを非常に詳細に説明した Web サイトを作成しましたか? もっと教えて。

C.サードパーティ ライブラリ

私が望むすべて (およびそれ以上!) を実行する完璧なサードパーティ ライブラリは存在しますか? 私の無知から私を救ってください。


決断

将来的には、PhoneGap の「Cleaver」プロジェクトがこれを行うための最良の方法になるようです。

まだ Android の準備ができていないため、現在 (2012 年 6 月上旬) のライト ワンス埋め込み HTML の最善の解決策は、偽の URL スキームを使用して Web ページからネイティブ アプリに通信することです (両方のプラットフォームで使用できます)。ネイティブ アプリから Web ページに移動するときに、ページ上で直接 JS を実行します)。

4

2 に答える 2

10

Android の場合、これはより簡単に実行できます。WebViewの方法を見てくださいaddJavascriptInterface。HTML JavaScript で直接呼び出すことができるメソッドを使用して、独自のオブジェクトを作成できます。

iOS には少しコツが必要です。この種の問題に対する最善の解決策は、次の 2 点です。

  • iOS へのコールバックの場合、基本的にはnative://somehost.com/somepath、javascript が iOS コードの使用を通知したい場合のように、独自の URL スキームを作成する必要があります。window.location = 'native://somehost.com/somepath';
  • webView:shouldStartLoadWithRequest:navigationType:UIWebViewを定義するオブジェクトにデリゲートを設定します。次のようになります。

    if ([request.URL.scheme isEqualToString:@"native"]){
        if([request.URL.host isEqualToString:@"somehost.com"]) {
            //Do the code you need to do here, branch off depending
            //on the path and/or host, you can parse parameters here too
            return NO; //This will keep UIWebView from trying to actually load 
                       //your made up scheme
        }
    }
    return YES; //If the request isn't one you want to intercept return YES/true
                //so UIWebView will load the page
    
  • iOS コードで情報を送信したり、javascript で関数を呼び出したりするには、WebView のstringByEvaluatingJavaScriptFromString:. これは JavaScript 式の結果を返すので、それを使用してページ自体から情報を取得することもできます。関数を呼び出すには、次のようなものを使用します

    [webview stringByEvaluationgJavaScriptFromString:@"myJavaScriptFunction();"]
    

カスタムを作成し、上記の iOS コードと同様にメソッドWebViewClientをオーバーライドすることにより、Android で構成されたスキームを処理することもできます。ロードを処理します。必ずカスタムを作成してusingに割り当ててください。実際にJavaScript関数を呼び出すには、次のようにしますshouldOverrideUrlLoadingtrueWebViewfalseWebViewWebViewClientWebViewsetWebViewClientWebViewwebview.loadUrl("javascript:myJavaScriptFunction();");

于 2012-05-18T18:20:47.707 に答える
0

PhoneGap iOS には Cleaver と呼ばれる概念があり、Web ビューをネイティブ iOS アプリに埋め込むことができます。Randy McMillian の良い例がここにあります。Android 側では、同じ機能を実現するための作業が行われています。ですから、私たちはまだそこにいませんが、そこにたどり着きます。

于 2012-05-18T19:44:42.597 に答える