[解決済み] iOS JavaScriptブリッジ
質問
HTML5のUIWebViewとiOSのネイティブフレームワークを併用するアプリを制作しています。私は、JavaScriptとObjective-Cの間の通信を実装できることを知っています。この通信を簡単に実装するためのライブラリはありますか?HTML5とjavascriptでiOSネイティブアプリを作成するためのライブラリがいくつかあることは知っています(例えば、AppMobi、PhoneGap)が、JavaScriptを多用するiOSネイティブアプリの作成を支援するライブラリがあるかどうかはわかりません。必要なのは
- Objective-C から JS メソッドを実行する
- JSからObjective-Cのメソッドを実行する
- Objective-CからJSのネイティブイベント(例えば、DOM readyイベント)をリッスンする。
どのように解決するのですか?
いくつかのライブラリがありますが、大きなプロジェクトで使用したことはないので、試してみるのもいいかもしれません。
- WebViewJavascriptBridge。 https://github.com/marcuswestin/WebViewJavascriptBridge
- GAJavaScriptです。 https://github.com/newyankeecodeshop/GAJavaScript
-
しかし、簡単なことだと思うので、自分で試してみてもいいかもしれませんね。私自身は、まさにそれが必要なときに行いました。また、自分のニーズに合った簡単なライブラリを作ってもいいかもしれません。
1. Objective-CからJSのメソッドを実行する
これは本当に1行のコードだけです。
NSString *returnvalue = [webView stringByEvaluatingJavaScriptFromString:@"your javascript code string here"];
詳細は公式 UIWebView ドキュメント .
2. JSからObjective-Cのメソッドを実行する
これは残念ながら少し複雑で、Mac OSX に存在する windowScriptObject プロパティ (およびクラス) がないため、2 つの間で完全な通信ができないからです。
しかし、javascript からカスタムメイドの URL を簡単に呼び出すことができます。
window.location = yourscheme://callfunction/parameter1/parameter2?parameter3=value
そして、Objective-Cからこのように傍受します。
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *URL = [request URL];
if ([[URL scheme] isEqualToString:@"yourscheme"]) {
// parse the rest of the URL object and execute functions
}
}
これは、(あるいはwindowScriptObjectを使うことで)それほどきれいではありませんが、動作します。
3. Objective-CからネイティブJSイベントをリッスンする(たとえばDOM readyイベントなど)
上記の説明から、これを行うには、いくつかの JavaScript コードを作成し、それを監視したいイベントにアタッチして、正しい
window.location
を呼び出し、それをインターセプトする必要があります。
繰り返しになりますが、本来あるべき姿のきれいなものではありませんが、動作はしています。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] JavaScript で css プロパティを使用して HTML 要素の背景色を設定する方法
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる
-
[解決済み] これは純関数ですか?