在新窗口或选项卡中打开的链接未在本机iOS中加载

时间:2018-04-18 14:43:18

标签: ios swift wkwebview

我的应用程序中有一个WKWebView,点击它时WKWebView中有一些按钮,没有加载新页面。从表面上看,他们正试图打开一个about_blank页面。在浏览器中,链接在新页面中打开并加载URL。

3 个答案:

答案 0 :(得分:3)

执行此操作的方法是实施BEFORE UPDATE并覆盖此方法

WKUIDelegate

如果您使用传递的配置返回新的func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? ,请求将被加载到新的webview。由于WKWebView尝试在浏览器中打开一个新窗口,因此此方法可以补偿iOS中的窗口。您可以使用target=_blank页面的UIViewController请求启动新的WKWebView

这是一个简单的例子,我用新的webView替换主target=_blank,并在同一个viewcontroller中加载请求,

WKWebView

这在某种程度上像浏览器中的标签一样工作。但是,请记住,通过上述更改,前向和后向不起作用,因为您已创建新的Webview。如果你想让一切工作,我建议你用这个webview加载一个新的viewcontroller或者创建一个新的视图来加载和显示它,你可以切换到其他主要webview。

答案 1 :(得分:2)

我选择了这种方法,即使这种方法在设备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)
}

答案 2 :(得分:0)

迅捷解决方案

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

您需要委托 WKUIDelegate