BXV*_*BXV 2 ios swift wkwebview
我的应用程序中有一个 WKWebView,单击它时 WKWebView 中有一些按钮,未加载新页面。从表面上看,他们正试图打开一个 about_blank 页面。在浏览器中,链接在新页面中打开并加载 URL。
我采用了这种方法,即使这种方法在设备 safari 浏览器中打开 URL,无论如何这些链接都指向外部链接,这种方法有帮助
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.targetFrame == nil {
if let url = navigationAction.request.url {
let app = UIApplication.shared
if app.canOpenURL(url) {
app.open(url, options: [:], completionHandler: nil)
}
}
}
decisionHandler(.allow)
}
Run Code Online (Sandbox Code Playgroud)
你这样做的方法是实现WKUIDelegate和覆盖这个方法
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView?
Run Code Online (Sandbox Code Playgroud)
如果您WKWebView使用传递的配置返回一个新的,请求将被加载到一个新的 webview。由于target=_blank尝试在浏览器中打开一个新窗口,此方法弥补了 iOS 中的不足。你可以UIViewController用这个新WKWebView的target=_blank页面请求来启动一个新的。
这是一个简单的例子,我WKWebView用新的 webView替换 main ,并在同一个视图控制器中加载请求,
extension ViewController: WKNavigationDelegate, WKUIDelegate {
public func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
let newWebView = WKWebView(frame: self.webView.frame,
configuration: configuration)
view.addSubview(newWebView)
return newWebView
}
}
Run Code Online (Sandbox Code Playgroud)
这在某种程度上就像浏览器中的选项卡。但是,请记住,通过上述更改,向前和向后不起作用,因为您已经创建了一个新的 web 视图。如果你想让一切正常,我建议你用这个 webview 加载一个新的 viewcontroller 或者创建一个新的视图来加载和显示它,你可以切换到其他主 webview。
| 归档时间: |
|
| 查看次数: |
4018 次 |
| 最近记录: |