【发布时间】:2011-02-21 20:48:13
【问题描述】:
当在 UIWebView 中检测到某个事件时,有没有办法获得对 Objective-c 的回调? Javascript 可以向 Objective-C 发送回调吗?
【问题讨论】:
标签: javascript objective-c ios cocoa-touch uiwebview
当在 UIWebView 中检测到某个事件时,有没有办法获得对 Objective-c 的回调? Javascript 可以向 Objective-C 发送回调吗?
【问题讨论】:
标签: javascript objective-c ios cocoa-touch uiwebview
更新 - 不再使用 UIWebView。使用 WKWebView,或者更好的(如果它符合您的需要并且您正在为 iOS 9 构建),一个 Safari 视图控制器。
但是如果你必须使用 UIWebView,在你的 UIWebView 委托中,为webView:shouldStartLoadWithRequest:navigationType:提供一个实现
在您的 HTML 或 Javascript 文件中,添加将 URL 发送到自定义方案的函数(出于可读性目的,自定义方案不是必需的)。发送的所有 URL 都将传递给您的 Objective-C 方法实现,然后您就可以为所欲为。
【讨论】:
只是用“bpapa”用实际代码来说明解决方案:
警告:未经测试的代码
在 UIWebView 的委托中实现这个方法...
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ( [[[inRequest URL] scheme] isEqualToString:@"callback"] ) {
// Do something interesting...
return NO;
}
return YES;
}
...然后像这样在 webwieb 中放置一个链接:
<a href="callback:whatever">Click me</a>
它应该会激活您的回调代码。显然,您可以使用 javascript 而不是普通链接来触发它。
【讨论】:
- (BOOL)isEqualToString:(NSString *)aString;