当UIWebView检测到某个事件时,是否有一种方法可以回调到Objective-C?Javascript能否向Objective-C发送回调?
当UIWebView检测到某个事件时,是否有一种方法可以回调到Objective-C?Javascript能否向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;
}
然后在网页中放置链接,像这样:
<a href="callback:whatever">Click me</a>
它应该激活您的回调代码。显然,您可以使用JavaScript而不是普通链接来触发它。
更新 - 不再使用UIWebView。 使用WKWebView,或者更好的是(如果适合您的需求并且您正在构建iOS 9),使用Safari View Controller。
但是,如果您必须使用UIWebView,请在您的UIWebView委托中提供实现webView:shouldStartLoadWithRequest:navigationType:
在您的HTML或Javascript文件中,添加发送URL到自定义协议的函数(为了可读性,自定义协议是不必要的)。 所有发送的URL将传递给您的Objective-C方法实现,然后您可以随心所欲地进行操作。
- (BOOL)isEqualToString:(NSString *)aString;
。 - mkko