まず、これはかなり大きな問題です。現在、かなり大規模なハイブリッド ソリューションを開発しています。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) 頑張ってください。結果を共有してください。