2

Javascript から Objective-C メソッドを呼び出そうとしています。私は phonegap などのライブラリを使用しておらず、Objective-C メソッドの呼び出しにも成功していますが、呼び出しの前に毎回 iframe を作成しているため、shouldStartLoadWithRequestデリゲートのみが呼び出されます。以下のリンクをたどっただけです。

UIWebView シークレット

UIWebView JavaScript から Objective-C への通信

しかし、webview デリゲートを呼び出さずに Objective-C メソッドを呼び出すにはどうすればよいshouldStartLoadWithRequestでしょうか?

4

1 に答える 1

0

まず、これはかなり大きな問題です。現在、かなり大規模なハイブリッド ソリューションを開発しています。js をすべてのプラットフォームで共通にする前に、ハイブリッド アプリのネイティブ部分がすべてのターゲット プラットフォームでどのように機能するかを理解することが重要です。

shouldStartLoadWithRequest メソッドは、カスタム URL を使用して Web ページからネイティブ コードに通信することに依存しています。リンクをクリックすると、たとえば、hybrid://showMenu は Web ビューでリンクを開こうとし、デリゲートは shouldStartLoadWithRequest でこの呼び出しをインターセプトします。その時点で、呼び出しを認識し、必要なアクションを実行します。たとえば、メニューを表示し、webview に読み込みを停止するように指示します。

BlackBerry (少なくとも v10 より前) と Android、そしておそらく Windows Phone の両方に同等の機能があります。PhoneGap は、プラットフォーム全体でこの手法を使用しています。これらの関数はすべて、hybrid://showMenu 呼び出しをキャッチできます。それらはすべて異なる方法で動作するため、コードを取得するには自分で調査する必要がありますが、異なるネイティブ シェルで同じ Javascript を使用することは絶対に可能であることを確認できます。

Javascript を高速化するために iframe を使用することは正しいですが、最高のパフォーマンスを得るために必要な他のトリックがあります。それらはブラウザごとに異なるため、最高のパフォーマンスが必要な場合は、Javascript がプラットフォーム間で少なくとも少し異なる必要があります。iOS で優れたパフォーマンスを得る方法については、次の記事を参照してください。

CocoaControls の iOS ハイブリッド アプリ入門

URL と WebView デリゲートを使用して JS とネイティブ コードの間で通信することを避けたい場合は、WebSocket を使用するというより複雑な方法を使用できます。

このためには、ローカル接続をリッスンする各ネイティブ ラッパーに WebSocket サーバー ライブラリを含める必要があります。次に、Javascript には、メッセージをネイティブ コードに渡すために使用する WebSocket クライアント ライブラリが含まれます。双方向通信が可能です。JS はプラットフォーム間でほぼ同じになります。

このメソッドは、私が必要とするものに対してやり過ぎなので、自分で実装していませんが、LinkdIn のハイブリッド アプリはそれを使用しています。詳細はこちら:

LinkdIn のハイブリッド アプリ ダイアリー

(2) 頑張ってください。結果を共有してください。

于 2013-01-07T22:18:02.297 に答える