你在 html 或 UIWebView 中的回调中需要什么特殊的东西来处理带有 href 的锚标签,或者在 href 中带有 mailto 链接的锚标签有什么特别之处吗?
问问题
18500 次
4 回答
63
在您的 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;
}
于 2010-04-05T23:33:56.563 回答
35
我注意到在 iPhone 模拟器中运行时,我可以单击 UIWebView 中的 HTTP 链接,它会在 Safari 中打开,但是当我单击 mailto 链接时,什么都不会发生。但是当我将应用程序部署到真实设备时,它就可以工作了。我预计原因是因为模拟器上没有邮件应用程序,但有 Safari。
于 2010-10-22T20:06:19.733 回答
2
我想指出,这可能不是最好的解决方案。
UIWebView 确实有一个名为 dataDetectorTypes 的属性-将其设置为 all 或 address 应该可以解决您的问题,而无需覆盖上述方法:
myWebView.dataDetectorTypes = UIDataDetectorTypeAll; //or UIDataDetectorTypeAddress etc..
但请注意,这可能无法在模拟器上运行 - 我在 iPad 6.0 模拟器上进行了尝试,虽然在 iPad 设备上它的运行效果非常棒,但它无法正常运行!
于 2012-11-07T07:31:09.203 回答
2
Swift 4 的工作示例:处理 3 个案例,根据需要扩展。
- 邮件链接正在工作
- 单击了您想在 Webview 本身中打开的某些 URL
在移动 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 }
于 2019-01-29T15:50:28.240 回答