首页 > 解决方案 > 如何在 safari (WKWebView, webkit) 中使用 target="blank" 打开 url

问题描述

我正在开发一个应用程序,它基本上是一个 Web 视图,显示一个旨在模仿应用程序的网站。大多数 URL 将是内部的,但是会有一些会重定向到其他站点。所有这些链接都将具有 target="_blank"。

我花了几天时间浏览这个网站和其他网站,以找到一个可以在 safari 中打开 _blank URL 的解决方案,但是我尝试过的一切都失败了。

对此的任何帮助将不胜感激。我在视图控制器的代码下方添加了

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate  {
    @IBOutlet weak var webView:WKWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        webView.uiDelegate = self
        
        let myURL = URL(string:"https://example.com")
        let myRequest = URLRequest(url: myURL!)
        webView?.load(myRequest)
        
    }}

func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
        if let frame = navigationAction.targetFrame,
            frame.isMainFrame {
            return nil
        }
        webView.load(navigationAction.request)
        return nil
}

标签: swiftxcodewebkitwkwebview

解决方案


用这个替换你的 createWebViewWith

extension ViewController: WKUIDelegate {

    //This opens maps or any other url given in new tab

    func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {

        if navigationAction.targetFrame == nil {

            webView.load(navigationAction.request)

        }

        return nil

    }

}

推荐阅读