WKWebview 在 macOS 上的默认浏览器中打开目标 =“_blank”链接

Posted

技术标签:

【中文标题】WKWebview 在 macOS 上的默认浏览器中打开目标 =“_blank”链接【英文标题】:WKWebview Open target=“_blank” link in Default Browser on macOS 【发布时间】:2019-04-03 22:51:38 【问题描述】:

我正在尝试使用 Swift Code for Xcode 在 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 应用程序,并且 WebPolicyDecisionListener 已在 10.14 中弃用。

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

【问题讨论】:

NSWorkspace.sharedWorkspace().openURL(request.URL!) 是否在运行时执行? 否,但 NSWorkspace.shared.open(request.url!) 将执行 【参考方案1】:

例如,您需要将webView.uiDelegate = ... 分配给WKUIDelegate 的实例,然后处理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;

【讨论】:

这个例子是ios特定的,它可以很容易地适应macOS。

以上是关于WKWebview 在 macOS 上的默认浏览器中打开目标 =“_blank”链接的主要内容,如果未能解决你的问题,请参考以下文章

在 macOS 中使用 WKWebView 加载 URL

macOS WKWebView 背景透明度

macOS:SwiftUI:MenuItem 用于截取 WKWebView 的屏幕截图并将其保存到带有时间戳的 ~/Pictures?

通过 Catalyst 工具 Xcode 11 从 Bundle for MacOS App 加载 WKWebView 中的 PDF

允许在 WKWebView 上的输入文件中上传文档

使用 WKWebView 在 iOS 13 中进行桌面浏览?