iOS:在 UIWebview 中使用 javascript 调用 obj-c 方法
Posted
技术标签:
【中文标题】iOS:在 UIWebview 中使用 javascript 调用 obj-c 方法【英文标题】:iOS: call obj-c methods using javascript in a UIWebview 【发布时间】:2013-01-22 09:09:14 【问题描述】:我正在编写一个与 JS 网页协作的函数。我使用 UIWebView 来包含网页,然后当我希望网页与我的应用程序通信时情况变得复杂。
使用– stringByEvaluatingjavascriptFromString:
方法可以很容易地在 UIWebView 中调用 javascript 函数
但是有没有更简单的方法在网页中调用 obj-c 函数,使用 javascript?我尝试使用 UIWebView 委托方法,但我认为它太 hacky。
有什么建议吗?
【问题讨论】:
【参考方案1】:我猜使用委托是您可以在 ios WebView 中使用的唯一(一种或两种)方法。但是有几个包装器可以帮助您轻松解决问题。
EasyJSWebView - 这复制了 android 中的开发体验。在 Android 中,您可以简单地使用 WebView 中的 addJavascriptInterface() 方法将 Javascript 桥接到 Java。 EasyJSWebView 提供了同步样式和异步样式,用于从 Objective-C 方法中获取返回值。
WebViewJavascriptBridge - 代码可能看起来有点像套接字编程。您可以在 Objective-C 中的“服务器”和 Javascript 中的“客户端”之间来回传递数据。
GAJavaScript - 这可能会提供更好的 DOM 操作体验。
查看所有这些并选择一个适合您需要的。
【讨论】:
啊这就是我一直在寻找的。我知道没有其他方法可以实现这一点,但包装器绝对有帮助。谢谢! EasyJSWebView 真的很棒!它完全可以满足您的需要。向杜克兰的帅哥们干杯。谢谢!【参考方案2】:是的,它确实感觉很笨拙并且有点滞后,但您需要使用 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;
【讨论】:
太棒了!另一种方式 - 提出 XHR 请求。两种方法都在“cordova/exec”模块(js部分)github.com/phonegap/phonegap/blob/master/lib/ios/CordovaLib/…中实现 嗨,在使用 iframe 时我遇到了这个问题,请参阅我的问题***.com/q/43867801/3378413【参考方案3】:如果您正在考虑升级到 WKWebView,XWebView 可能是最好的解决方案。
【讨论】:
以上是关于iOS:在 UIWebview 中使用 javascript 调用 obj-c 方法的主要内容,如果未能解决你的问题,请参考以下文章
swift 笔记:iOS与JavaScript的交互(一):UIWebView - 2.1直接使用字符串通过评估Java脚本(来自:)
位置服务在 iOS10 中无法与 UIWebView 一起使用
iOS:在 UIWebview 中使用 javascript 调用 obj-c 方法