12

複数のプラットフォーム用のhtmlアプリケーションの開発を開始しました。最近、Cordova 2.0(PhoneGap)について聞いたことがありますが、それ以来、ブリッジがどのように機能するかを知りたいと思っていました。多くのコードを歩いた後、Exec.jsがJS->ネイティブからの呼び出しが発生するコードであることがわかりました

execXhr = execXhr || new XMLHttpRequest();
        // Changeing this to a GET will make the XHR reach the URIProtocol on 4.2.
        // For some reason it still doesn't work though...
        execXhr.open('HEAD', "file:///!gap_exec", true);
        execXhr.setRequestHeader('vc', cordova.iOSVCAddr);
        if (shouldBundleCommandJson()) {
            execXhr.setRequestHeader('cmds', nativecomm());
        }
        execXhr.send(null);
    } else {
        execIframe = execIframe || createExecIframe();
        execIframe.src = "gap://ready";

しかし、それがどのように機能するか、ここでの概念は何ですか、file:///!gap_execまたはgap:// readyは何をするのかを理解したいですか?呼び出しはどのように下位層(ネイティブコード層)に伝播しますか

事前にたくさんありがとう。

4

2 に答える 2

13

トリックは簡単です:

ウェブビューがあります。これにより、アプリが表示されます。Webビューはすべてのナビゲーションイベントを処理します。

ブラウザが次の場所に移動した場合:

file:///!gap_exec 

また

gap://

Webビューはナビゲーションをキャンセルします。これらの文字列の背後にあるものはすべて識別子として再利用され、具体的なプラグイン/プラグインメソッドとパラメーターを取得します。

疑似URLの例:

gap://echoplugin/echothistext?Hello World

これにより、phonegapはを検索しechoplugin、メソッドを呼び出しechothistextてテキスト"Hello World"を(ネイティブ)プラグインに送信します。

アップデート

ネイティブからjavascriptに戻る方法は、javascript:URLをWebビューにロードすることです(またはそうなる可能性があります)。

javascriptはコールバックIDをネイティブコードに送信する必要があるため、具体的な実装はもう少し複雑です。同時に複数のネイティブコールが実行されている可能性があります。しかし実際には、これは魔法ではありません。正しいJSONを正しいjavascript-callbackに取得するための単なる数字。

プラットフォームとJavaScriptの間で通信するにはさまざまな方法があります。Androidの場合、3つまたは4つの異なるブリッジがあります。

于 2012-11-09T21:52:14.677 に答える
4

私もこれをもっと詳しく理解しようとしています。基本的に、iOS側には2つの方法があります...

ソースから、cordovaはwebView:shouldStartLoadWithRequest:...を使用して「READY」メッセージを送信し、2番目のメッセージで結果を取得しているようですが、よくわかりません。

コルドバソースiOSExec

そこで学ぶことはたくさんあります。

于 2013-01-03T11:38:35.017 に答える