簡體   English   中英

iOS:在UIWebview中使用javascript調用obj-c方法

[英]iOS: call obj-c methods using javascript in a UIWebview

我正在編寫一個與JS網頁協作的函數。 我使用UIWebView來包含網頁,當我希望網頁與我的應用程序通信時,情況變得復雜。

通過使用– stringByEvaluatingJavaScriptFromString:方法在UIWebView中調用javascript函數很容易

但是有沒有更簡單的方法來調用網頁中的obj-c函數,使用javascript? 我嘗試使用UIWebView委托方法,但我認為它太hacky了。

有什么建議?

我想使用委托是您可以在iOS WebView中使用的唯一(一個或兩個)方法。 但有幾個包裝可以幫助你輕松。

  1. EasyJSWebView - 這復制了Android中的開發體驗。 在Android中,您可以簡單地使用WebView中的addJavascriptInterface()方法將Javascript橋接到Java。 EasyJSWebView提供同步樣式和異步樣式,用於從Objective-C方法獲取返回值。

  2. WebViewJavascriptBridge - 代碼看起來有點像套接字編程。 您可以在Objective-C中的“server”和Javascript中的“client”之間來回傳遞數據。

  3. GAJavaScript - 這可以提供更好的DOM操作體驗。

看一下所有這些並選擇一個符合您需求的產品。

是的,它確實感覺hacky並且有點遲鈍但你需要使用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;
}

如果您正在考慮升級到WKWebView, XWebView可能是最好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM