ios - 在 WKWebView 中启动电话/电子邮件/ map 链接

标签 ios objective-c cocoa wkwebview

KINWebBrowser是用于 iOS 应用程序的开源 Web 浏览器模块。我最近升级了 KINWebBrowser 以使用 WKWebView开始逐步淘汰 UIWebView。这产生了显着的改进,但是:

问题:WKWebView 不允许用户启动包含电话号码、电子邮件地址、 map 等 URL 的链接。

当从显示页面作为链接启动时,如何配置 WKWebView 以启动这些备用 URL 的标准 iOS 行为?

所有 code is available here

有关 WKWebKit 的更多信息

参见 issue on the KINWebBrowser GitHub here

最佳答案

通过将此函数添加到您的 KINWebBrowserViewController.m,我能够使其适用于 Google map 链接(这似乎与 target="_blank")和 tel: scheme

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
    if(webView != self.wkWebView) {
        decisionHandler(WKNavigationActionPolicyAllow);
        return;
    }

    UIApplication *app = [UIApplication sharedApplication];
    NSURL         *url = navigationAction.request.URL;

    if (!navigationAction.targetFrame) {
        if ([app canOpenURL:url]) {
            [app openURL:url];
            decisionHandler(WKNavigationActionPolicyCancel);
            return;
        }
    }
    if ([url.scheme isEqualToString:@"tel"])
    {
        if ([app canOpenURL:url])
        {
            [app openURL:url];
            decisionHandler(WKNavigationActionPolicyCancel);
            return;
        }
    }
    decisionHandler(WKNavigationActionPolicyAllow);
}

关于ios - 在 WKWebView 中启动电话/电子邮件/ map 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26501172/

相关文章:

ios - iOS9中如何呈现PopOver

ios - SpriteKit,把一个进程放在另一个核心上?

objective-c - 如何创建值包含字符序列的谓词,例如 Xcode 过滤

iphone - NSScrollView 具有未剪辑的内容 View ?

objective-c - 尝试在 OS X 中卸载卷时解释返回值(反对者)

ios - 为什么清除 Derived Data 可以清除 Xcode 中的各种错误?

ios - AudioKit - 记录默认输入(麦克风)而不将其发送到输出

ios - 为什么将 UILabel 设置为完全透明会丢失点击手势?

ios - Objective-C - #define 使用 __VA_ARGS__

c - 在使用 lldb 调试 macOS 应用程序时,是否可以使用观察点观察寄存器的内容以进行更改?