Почему WKWebView не открывает ссылки с target = «_ blank»? - PullRequest
0 голосов
/ 12 ноября 2019

Что не так с моим кодом? Почему WKWebView не открывает ссылки с target = «_ blank»? Я хочу открыть ссылки, которые открываются в новой вкладке в браузере по умолчанию. Как этого достичь?

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate {

    @IBOutlet weak var webView: WKWebView!
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.
        let url = "https://example.com"
        let request = URLRequest(url: URL(string: url)!)
        self.webView.load(request)
        self.webView.addObserver(self, forKeyPath: #keyPath(WKWebView.isLoading), options: .new, context: nil)

        // Page Scrolling - false or true
        webView.scrollView.isScrollEnabled = false

        // Open new tab links
        webView.uiDelegate = self
        func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
            if let frame = navigationAction.targetFrame,
                frame.isMainFrame {
                return nil
            }
            // for _blank target or non-mainFrame target
            webView.load(navigationAction.request)
            return nil
        }

    }

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if keyPath == "loading" {
            if webView.isLoading {
                activityIndicator.startAnimating()
                activityIndicator.isHidden = false
            } else {
                activityIndicator.stopAnimating()
                activityIndicator.isHidden = true
            }
        }
    }
}
...