Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么WKWebView没有打开target=“_空白”;?_Ios_Swift_Wkwebview - Fatal编程技术网

Ios 为什么WKWebView没有打开target=“_空白”;?

Ios 为什么WKWebView没有打开target=“_空白”;?,ios,swift,wkwebview,Ios,Swift,Wkwebview,我的代码有什么问题?为什么WKWebView没有打开带有target=“\u blank”的链接?我想用默认浏览器打开在新选项卡中打开的链接。如何做到这一点 import UIKit import WebKit class ViewController: UIViewController, WKUIDelegate { @IBOutlet weak var webView: WKWebView! @IBOutlet weak var activityIndicator: UI

我的代码有什么问题?为什么WKWebView没有打开带有target=“\u 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
            }
        }
    }
}

这是问题的正确代码

导入UIKit
导入WebKit
类ViewController:UIViewController、WKUIDelegate{
@ibvar-webView:WKWebView!
@IBOutlet弱var活动指示器:UIActivityIndicator视图!
重写func viewDidLoad(){
super.viewDidLoad()
webView.uiDelegate=self
//加载视图后,通常从nib执行任何其他设置。
让url=”https://example.com"
let request=URLRequest(url:url(string:url)!)
self.webView.load(请求)
self.webView.addObserver(self,forKeyPath:#keyPath(WKWebView.isload),选项:。新建,上下文:nil)
//页面滚动-错误或正确
webView.scrollView.isScrollEnabled=false
}
//打开新的选项卡链接
func webView(webView:WKWebView,
createWebViewWith配置:WKWebViewConfiguration,
对于导航操作:WKNavigationAction,
windowFeatures:WKWindowFeatures)->WKWebView{
如果navigationAction.targetFrame==nil,则让url=navigationAction.request.url,让scheme=url.scheme{
如果[“http”、“https”、“mailto”]包含(其中:{$0.caseInsensitiveCompare(scheme)==.orderedSame}){
UIApplication.shared.open(url,选项:[:],completionHandler:nil)
}
}
归零
}
重写func observeValue(forKeyPath keyPath:String?,对象的类别:Any?,更改:[NSKeyValueChangeKey:Any]?,上下文:UnasFemeutableRawPointer?){
如果keyPath==“正在加载”{
如果webView.isLoading{
activityIndicator.startAnimating()
activityIndicator.isHidden=false
}否则{
activityIndicator.stopAnimating()
activityIndicator.isHidden=true
}
}
}

}
Your
func网络视图(u.webView:WKWebView,createWebViewWith
将永远不会被调用。您已将其隐藏在您的
viewDidLoad
中。它应该放在哪里?不是放在函数体中。将其放在与您放置viewDidLoad相同的位置。我可以让它工作,但它不是在safari上打开的,而是在应用程序中打开的。我希望所有新的选项卡链接都打开在默认浏览器中