【发布时间】:2011-02-04 12:14:39
【问题描述】:
你需要在 html 中的区域或 UIWebView 中的回调来处理带有 href 的锚标签,或者在 href 中带有 mailto 链接的锚标签有什么特别之处吗?
【问题讨论】:
你需要在 html 中的区域或 UIWebView 中的回调来处理带有 href 的锚标签,或者在 href 中带有 mailto 链接的锚标签有什么特别之处吗?
【问题讨论】:
在你的 UIWebView 的委托中,做:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if ([[[request URL] scheme] isEqual:@"mailto"]) {
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}
return YES;
}
【讨论】:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { if (request.url?.scheme == "mailto") { UIApplication.shared.open(request.url)....
我注意到,在 iPhone 模拟器中运行时,我可以单击 UIWebView 中的 HTTP 链接,它会在 Safari 中打开,但是当我单击 mailto 链接时,什么都不会发生。但是当我将应用程序部署到真实设备时,它就可以工作了。我估计是因为模拟器上没有邮件应用,但是有Safari。
【讨论】:
我想指出,这可能不是最好的解决方案。
UIWebView 确实有一个名为 dataDetectorTypes 的属性 - 将其设置为 all 或 address 应该可以解决您的问题,而不会覆盖上述方法:
myWebView.dataDetectorTypes = UIDataDetectorTypeAll; //or UIDataDetectorTypeAddress etc..
但请注意,这可能无法在模拟器上运行 - 我在 iPad 6.0 模拟器上进行了尝试,但在 iPad 设备上它却无法正常运行!
【讨论】:
Swift 4 的工作示例: 治疗3例,按需扩充。
在移动 Safari 中打开所有其他 URL
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url {
if (url.scheme == "mailto") {
// mailto: link is clicked
UIApplication.shared.open(url)
decisionHandler(.cancel)
return
}
if (url.absoluteString.contains("www.example.com/webviewURL")) {
// Load this stuff in WebView
decisionHandler(.allow)
return
} else {
// open any other URL in mobile Safari
UIApplication.shared.open(url)
decisionHandler(.cancel)
return
}
}
decisionHandler(.cancel)
return
}
【讨论】: