Is the areanything special you need in html or Callbacks in a UIWebView to handle anchor tags with an href, or is there something special about an anchor tag with a mailto link in the href?
質問する
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 に設定すると、上記の Method をオーバーライドせずに問題を解決できます。
myWebView.dataDetectorTypes = UIDataDetectorTypeAll; //or UIDataDetectorTypeAddress etc..
ただし、これはシミュレーターでは機能しない可能性があることに注意してください-iPad 6.0シミュレーターで試してみましたが、iPadデバイスでは魅力的に機能していますが、機能していません!
于 2012-11-07T07:31:09.203 に答える
2
Swift 4 の作業例: 3 つのケースが処理され、必要に応じて拡張されます。
- mailto-link は機能しています
- Webview自体で開きたいURLがクリックされた
モバイルサファリで他のすべての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 に答える