Ios 为什么WKWebView没有打开target=“_空白”;?
我的代码有什么问题?为什么WKWebView没有打开带有target=“\u blank”的链接?我想用默认浏览器打开在新选项卡中打开的链接。如何做到这一点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
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
}
}
}
}
Yourfunc网络视图(u.webView:WKWebView,createWebViewWith
将永远不会被调用。您已将其隐藏在您的viewDidLoad
中。它应该放在哪里?不是放在函数体中。将其放在与您放置viewDidLoad相同的位置。我可以让它工作,但它不是在safari上打开的,而是在应用程序中打开的。我希望所有新的选项卡链接都打开在默认浏览器中