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

我正在写一个与JS网页协作的function。 我使用UIWebView来包含网页,然后当我想要网页与我的应用程序进行通信时,情况变得复杂。

在UIWebView中调用JavaScript函数很简单,方法是使用– stringByEvaluatingJavaScriptFromString:方法

但有没有更简单的方法来调用网页中的obj-c函数,使用JavaScript? 我尝试使用UIWebView委托方法,但我认为这太hacky。

有什么build议?

我想使用委托是在iOS WebView中可以使用的唯一(一个或两个)方法。 但有几个包装可以帮助你轻松。

  1. EasyJSWebView – 这在Android中复制了开发体验。 在Android中,您可以简单地使用WebView中的addJavascriptInterface()方法将Javascript桥接到Java。 EasyJSWebView提供了同步风格和asynchronous风格来获取Objective-C方法的返回值。

  2. WebViewJavascriptBridge – 代码可能看起来有点像套接字编程。 您可以在Objective-C中的“服务器”和Javascript中的“客户端”之间来回传递数据。

  3. GAJavaScript – 这可以提供更好的DOM操作体验。

看看所有这些,并select一个适合您的需求。

是的,它感到hacky,有点laggy,但你需要与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可能是最好的解决scheme。