WKWebView拦截scheme WKWebView打开第三方应用 iOS

WKWebView出于安全性考虑, 对于打开外部链接 应用等操作进行了拦截

WKWebView打开外部应用, Safari等

设置代理

_webView.navigationDelegate = self;

手动打开拦截

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
    // WKWebView默认拦截scheme 需在下面方法手动打开
    // 打开外部应用 Safari等操作
    if ([navigationAction.request.URL.absoluteString hasPrefix:@"xxx"]) { // 对应的scheme
        [[UIApplication sharedApplication] openURL:navigationAction.request.URL];
    }
    decisionHandler(WKNavigationActionPolicyAllow);
}
WKWebView替换JS alert confirm等

设置代理

_webView.UIDelegate = self;

拦截JS alert

- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler{
    // WKWebView不支持JS的alert 用此方法进行拦截
    // message为JS中alert显示的信息 可与前端开发约定好信息
    if ([message isEqualToString:@"xxx"]) {
        // 做OC操作
    }
    completionHandler();
}

拦截JS confirm

- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler{
    // 类比alert 拦截JS confirm
    completionHandler(NO);
}

github示例

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容