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

Posted

技术标签:

【中文标题】在本机 iOS 中未加载在新窗口或选项卡中打开的链接【英文标题】:Links opening in new window or tab is not loaded in native iOS 【发布时间】:2018-04-18 14:43:17 【问题描述】:

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

【问题讨论】:

【参考方案1】:

执行此操作的方法是实现WKUIDelegate 并覆盖此方法

func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView?

如果您使用传递的配置返回一个新的WKWebView,请求将被加载到一个新的webview。由于target=_blank 尝试在浏览器中打开一个新窗口,因此此方法在 ios 中进行了补偿。您可以使用这个新的WKWebView 启动一个新的UIViewController,其中请求target=_blank 页面。

这是一个简单的例子,我用新的 webView 替换主 WKWebView,并在同一个视图控制器中加载请求,

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
    

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

【讨论】:

另外,这很有用***.com/questions/25713069/…【参考方案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)

【讨论】:

【参考方案3】:

快速解决方案

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

【讨论】:

以上是关于在本机 iOS 中未加载在新窗口或选项卡中打开的链接的主要内容,如果未能解决你的问题,请参考以下文章

使用 Thymeleaf 创建在新窗口/选项卡中打开的链接

捕获“在新选项卡中打开链接”和“在新窗口中打开链接”事件

csharp 在新选项卡中打开窗口

Flash应该在新选项卡中打开窗口,但它会在Mac上打开一个新的弹出窗口

js跳转页面在新选项卡中打开

Javascript - 通过单击按钮在新选项卡中打开给定的 URL