【问题标题】:WKWebview Open target=“_blank” link in Default Browser on macOSWKWebview 在 macOS 上的默认浏览器中打开目标 =“_blank”链接
【发布时间】: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!) 将执行

标签: swift macos wkwebview


【解决方案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。
猜你喜欢
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 2018-10-04
  • 1970-01-01
相关资源
最近更新 更多