【问题标题】:How to open urls with target="blank" in safari (WKWebView, webkit)如何在 safari (WKWebView, webkit) 中使用 target="blank" 打开 url
【发布时间】:2021-03-18 22:53:02
【问题描述】:

我正在开发一个应用程序,它基本上是一个 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
}

【问题讨论】:

    标签: swift xcode webkit wkwebview


    【解决方案1】:

    用这个替换你的 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
    
        }
    
    }
    

    【讨论】:

    • 您好,感谢您对此进行调查。我已经替换了上面的代码,遗憾的是这不起作用。当我尝试构建应用程序时,出现错误:在范围内找不到类型“WebViewController”。如果我删除第一行“extension WebViewController:WKUIDelegate {”并将其替换为:“extension WKWebView:WKUIDelegate {”代码将构建,并且当我使用模拟器测试带有 target="_blank" 的链接时点击链接什么都没有发生。
    • 将 WebViewController 替换为您的控制器名称 ViewController,或共同支付此函数体并将其粘贴到您的函数体中
    • 我更新了答案测试它现在删除了你的 createWebViewWith 函数和这个。
    猜你喜欢
    • 2015-08-16
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    相关资源
    最近更新 更多