21

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?

4

4 に答える 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 つのケースが処理され、必要に応じて拡張されます。

  1. mailto-link は機能しています
  2. Webview自体で開きたいURLがクリックされた
  3. モバイルサファリで他のすべての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 に答える