我开始使用UIWebView来显示动态内容,而不是使用UI元素本地执行。是否可以通过简单地点击UIWebView中的链接来触发本机应用程序功能?示例:点击链接然后切换当前视图?
答案 0 :(得分:23)
是的,这是可能的。在您的html中,您编写了一个JS来加载带有伪方案的URL,例如
window.location = "request_for_action://anything/that/is/a/valid/url/can/go/here";
然后,在您的iOS代码中,为您的webView分配一个代表,并在您的代理中处理
webView:shouldLoadWithRequest:navigationType
类似
if( [request.URL.scheme isEqualToString: @"request_for_action"] )
{
// parse your custom URL to extract parameter, use URL parts or query string as you like
return NO; // return NO, so webView won't actually try to load this fake request
}
-
暂且不说,你可以做其他方式,让iOS代码在你的html中调用一些JS代码 使用
NSString* returnValue = [self.webView stringByEvaluatingJavaScriptFromString: "someJSFunction()"];
答案 1 :(得分:9)
是的!当用户按下链接时,您会在Web视图的委托中听到它,然后可以执行任何操作。强大的东西可以通过这种方式完成。
网络视图的委托已发送webView:shouldStartLoadWithRequest:navigationType:
。你分析发生了什么,并按你的意愿做出回应。为了防止Web视图尝试关注链接(毕竟可能完全是假的),只需返回NO。
在TidBITS新闻应用程序的这个示例中,我在网页中有一个使用完全构成的play:
方案的链接。我在代表中发现并播放:
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)r
navigationType:(UIWebViewNavigationType)nt {
if ([r.URL.scheme isEqualToString: @"play"]) {
[self doPlay:nil];
return NO;
}
if (nt == UIWebViewNavigationTypeLinkClicked) {
[[UIApplication sharedApplication] openURL:r.URL];
return NO;
}
return YES;
}
答案 2 :(得分:2)
实施UIWebViewDelegate
方法webView:shouldStartLoadWithRequest:navigationType:
。
根据需要处理navigationType和请求。