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:SwiftUI:MenuItem 用于截取 WKWebView 的屏幕截图并将其保存到带有时间戳的 ~/Pictures?
通过 Catalyst 工具 Xcode 11 从 Bundle for MacOS App 加载 WKWebView 中的 PDF