4

JSのWebページと連携する関数を書いています。UIWebViewを使用してWebページを格納しましたが、Webページをアプリと通信させたい場合に状況が複雑になりました。

UIWebViewでjavascript関数を呼び出すのは、– stringByEvaluatingJavaScriptFromString:メソッドを使用することで簡単です。

しかし、JavaScriptを使用してWebページでobj-c関数を呼び出す簡単な方法はありますか?UIWebViewデリゲートメソッドを使用してみましたが、ハッキーすぎると思います。

何かアドバイス?

4

3 に答える 3

9

iOS WebViewで使用できる方法は、デリゲートを使用することだけだと思います(1つまたは2つ)。しかし、簡単にするのに役立つラッパーがいくつかあります。

  1. EasyJSWebView-これは、Androidの場合と同様に開発エクスペリエンスを複製します。Androidでは、WebViewのaddJavascriptInterface()メソッドを使用するだけで、JavascriptをJavaにブリッジできます。EasyJSWebViewは、Objective-Cメソッドから戻り値を取得するための同期スタイルと非同期スタイルの両方を提供します。

  2. WebViewJavascriptBridge-コードはソケットプログラミングに少し似ているかもしれません。Objective-Cの「サーバー」とJavascriptの「クライアント」の間でデータをやり取りできます。

  3. GAJavaScript-これにより、より優れたDOM操作エクスペリエンスが提供される可能性があります。

それらすべてを見て、ニーズに合ったものを選択してください。

于 2013-01-22T09:29:07.487 に答える
5

はい、それはハッキーで少し遅れているように感じますが、UIWebViewDelegateでそれを行う必要があります

function init()
{
  $('input').on('click', function(e) { answerBoxShouldBeginEditing(e); });
}

function answerBoxShouldBeginEditing(e)
{
  var object = e.toElement;

  var answer = $(object).attr('name');
  var request = 'engine:' + answer;

  var iframe = document.createElement('IFRAME');
  iframe.setAttribute('src', request);
  document.documentElement.appendChild(iframe);
  iframe.parentNode.removeChild(iframe);
  iframe = null;
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
  NSString *requestString = [[request URL] absoluteString];
  if ([requestString hasPrefix:@"engine:"]) {

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    return NO;
  }
  return YES;
}
于 2013-01-22T09:15:24.997 に答える
0

WKWebViewへのアップグレードを検討している場合は、XWebViewが最適なソリューションである可能性があります。

于 2015-04-28T15:21:08.733 に答える