safari - WKWebView 目标 ="_blank"链接在 safari ios11、swift 4 中打开新标签

标签 safari ios11 swift4 wkwebview

我知道这个问题已经被问了很多,我想我已经查看了每一篇关于这个的帖子,但我仍然无法让它发挥作用。我是 swift 的新手,我认为这阻碍了我从其他答案中调整代码片段。

所以这是我的问题:

我正在使用 WKWebView 在我的应用程序中查看网站。当我单击打开新选项卡的链接时,什么也没有发生。我希望在 safari 中或至少在新的 wkwebview 中打开该新选项卡。我尝试从以下位置实现此答案:https://stackoverflow.com/a/27391215 , 和 Open a WKWebview target="_blank" link in Safari和许多其他类似的答案,但没有取得任何进展。我需要做什么才能在 swift 4 中完成这项工作?

目前我只有这个,因为我无法实现我成功找到的任何其他解决方案:

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

但它似乎没有任何作用。如果有人能帮助我指明正确的方向,我将不胜感激。

最佳答案

我粘贴了一些 的示例代码WKWebView 项目(从文件夹加载本地 html)需要具有 target=_blank 的链接在新的浏览器窗口中打开。

我已经强调了正确打开链接所必须具备的 3 件事。

  • class ViewController extends WKUIDelegate
  • self.webView.uiDelegate = self
  • 使用 UIApplication.shared.open而不是 webView.load

  • 让我知道它有效,如果有人可以对下面的示例代码提出改进建议,那也会对我有帮助:)

    的完整示例代码Xcode 9.2,Swift 4 以下。

    祝你好运
    import UIKit
    import WebKit
    
    class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {
    
        @IBOutlet weak var webView: WKWebView!
        override func viewDidLoad() {
            super.viewDidLoad()
            self.webView.uiDelegate = self
    
            let htmlPath = Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "www")
            let htmlUrl = URL(fileURLWithPath: htmlPath!)
            let htmlDir = Bundle.main.url(forResource: "www", withExtension: nil)
            webView.loadFileURL(htmlUrl, allowingReadAccessTo: htmlDir!)
        }
    
        func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
            if navigationAction.targetFrame == nil {
                //webView.load(navigationAction.request)
                UIApplication.shared.open(navigationAction.request.url!, options: [:])
            }
            return nil
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    
        override var prefersStatusBarHidden: Bool {
            return true
        }
    
    }
    

    关于safari - WKWebView 目标 ="_blank"链接在 safari ios11、swift 4 中打开新标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48073805/

    相关文章:

    javascript - iPad - 无法在框架内滚动

    php - Safari ios 将表单从 https 提交到 http 页面开始加载但停止

    UINavigationController 后退按钮不会在 iOS 11 上隐藏标题

    iOS 11-用户本地通知每 x 分钟重复一次

    ios - 如何禁用较低版本ios的应用程序扩展?

    html - 是否有文本输入最大长度在 Safari 中不起作用的解决方法?

    ios - iOS11 Safari:添加到主屏幕本地存储生命周期

    ios - Codable 结构 - 解析 json 时缺少 key 时枚举

    json - Swift 解码具有混合类型和可能的子结构的 JSON

    swift - 如何确定 Swift 中滑动的速度和角度