iOS:在UIWebview中使用javascript调用obj-c方法
我正在写一个与JS网页协作的function。 我使用UIWebView来包含网页,然后当我想要网页与我的应用程序进行通信时,情况变得复杂。
在UIWebView中调用JavaScript函数很简单,方法是使用– stringByEvaluatingJavaScriptFromString:
方法
但有没有更简单的方法来调用网页中的obj-c函数,使用JavaScript? 我尝试使用UIWebView委托方法,但我认为这太hacky。
有什么build议?
我想使用委托是在iOS WebView中可以使用的唯一(一个或两个)方法。 但有几个包装可以帮助你轻松。
-
EasyJSWebView – 这在Android中复制了开发体验。 在Android中,您可以简单地使用WebView中的addJavascriptInterface()方法将Javascript桥接到Java。 EasyJSWebView提供了同步风格和asynchronous风格来获取Objective-C方法的返回值。
-
WebViewJavascriptBridge – 代码可能看起来有点像套接字编程。 您可以在Objective-C中的“服务器”和Javascript中的“客户端”之间来回传递数据。
-
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。
- 用UIImage和下载的图像进行caching
- 如何从iOS中的UIImagePickerController中select多个图像
- Parse.com错误“启用固定时不允许使用方法”。 当我使用PFQueryTableViewController子类
- 如何用imageEdgeInsets在UIButton中更改图片的tintColor?
- setlocale()在iOS模拟器中不起作用?
- Restkit请求不发送参数
- 如何从iphone中删除NSString中的HTML标记?
- TestFlight不接受TestFlight SDK的构build
- 如何在iOS(Xamarin C#)游戏中dynamicpopup和隐藏UIPickerView?