首页 > 解决方案 > WKWebview 在 macOS 上的默认浏览器中打开目标 =“_blank”链接

问题描述

我正在尝试使用 Xcode 的 Swift 代码在 macOS 上的默认浏览器中打开 WKWebview 打开外部链接 (target=_blank)。此代码仅用于下载 zip 或 nzb 链接文件,不起作用:

试图

func webView(webView: WebView!, decidePolicyForNavigationAction actionInformation: [NSObject : AnyObject]!, request: NSURLRequest!, frame: WebFrame!, decisionListener listener: WebPolicyDecisionListener!) {
    let url = request.URL!.absoluteString
    if url.hasSuffix(".zip") || url.hasSuffix(".nzb") {
        listener.ignore()
        NSWorkspace.sharedWorkspace().openURL(request.URL!)
    } else {
        listener.use()
    }
}

该代码不适用于 macosx 10.14 和 webview 上的 Webview App,并且 WebPolicyDecisionListener 已在 10.14 中被弃用。

我希望 WKWebview 使用 Swift 打开外部链接 (target=_blank)。

标签: swiftmacoswkwebview

解决方案


例如,您需要分配webView.uiDelegate = ...to 和WKUIDelegatethen 句柄createWebViewWith:for:windowFeatures:的实例;

- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
{
    if let url = navigationAction.request.url, navigationAction.targetFrame == nil {
        let shared = UIApplication.shared
        if shared.canOpenURL(url) {
            shared.open(url, options: [UIApplication.OpenExternalURLOptionsKey: Any](), completionHandler: nil)
        }
    }
    return nil;
}

推荐阅读