菜鸟教程小白 发表于 2022-12-12 15:57:47

html - WKWebView 未打开某些目标 ="_blank"链接


                                            <p><p>我已经实现了公认的解决方案<a href="https://stackoverflow.com/questions/25713069/why-is-wkwebview-not-opening-links-with-target-blank" rel="noreferrer noopener nofollow">here</a>它确实适用于
一些网站。例如:访问 www.tomcruise.com 并点击他的预告片。这些链接中的每一个都有 target="_blank"并在实现先前链接的堆栈溢出帖子中建议的解决方案后开始打开。 </p>

<p>但现在我发现如果我们去 <a href="https://plus.google.com/+Gmail" rel="noreferrer noopener nofollow">here</a>并单击任何链接(在撰写此问题时,我尝试过的链接具有如下的 href 标签</p>

<pre><code> &lt;a rel=&#34;nofollow&#34; target=&#34;_blank&#34; href=&#34;http://www.nowmagazine.co.uk/celebrity-news/victoria-and-david-beckham-fighting-to-be-together-296082&#34; class=&#34;ot-anchor aaTEdf&#34; jslog=&#34;10929; track:click&#34; dir=&#34;ltr&#34;&gt;http://www.nowmagazine.co.uk/celebrity-news/victoria-and-david-beckham-fighting-to-be-together-296082&lt;/a&gt;
</code></pre>

<p>当我从 WKWebView 内部单击此链接时,会调用下面的 WKUIDelegate 方法,但具有 navigationAction.request = "",因此调用 webView.loadRequest("") 时没有任何反应。还有其他人面临这个问题吗? </p>

<pre><code>optional func webView(_ webView: WKWebView, createWebViewWithConfiguration configuration: WKWebViewConfiguration,
       forNavigationAction navigationAction: WKNavigationAction,
            windowFeatures windowFeatures: WKWindowFeatures) -&gt; WKWebView?{
      if navigationAction.targetFrame == nil {
          webView.loadRequest(navigationAction.request)
      }

      return nil
}
</code></pre>

<ul>
<li>上面指定的 href 标记导致 WKUIDelegate 方法被空 url 调用的特殊之处是什么?</li>
<li>我们如何解决这个问题?让我知道您是如何导致问题的,因为我也对调试感兴趣。 </li>
</ul></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我希望我可以使用 WKWebView 委托(delegate)方法来解决它,但我想不通。</p>

<p>于是我去了UIWebView时代的网页加载完成后运行javascript函数的解决方案</p>

<pre><code>func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
    let jsCode = &#34;var allLinks = document.getElementsByTagName(&#39;a&#39;);if (allLinks) { var i;for (i=0; i&lt;allLinks.length; i++) {var link = allLinks;var target = link.getAttribute(&#39;target&#39;);if (target &amp;&amp; target == &#39;_blank&#39;) {link.setAttribute(&#39;target&#39;,&#39;_self&#39;);} } }&#34;
    webView.evaluateJavaScript(jsCode, completionHandler: nil)
}
</code></pre>

<p>这解决了点击任何 google plus 帖子页面中的链接导致加载空白页面的问题</p>

<hr/>

<p>2015 年 11 月 3 日更新:问题中解释的现象在 Swift 2.0 代码中不再发生在我身上。因此,您应该能够使用提供的解决方案 <a href="https://stackoverflow.com/questions/25713069/why-is-wkwebview-not-opening-links-with-target-blank]" rel="noreferrer noopener nofollow">here</a>为了您的所有目的</p></p>
                                   
                                                <p style="font-size: 20px;">关于html - WKWebView 未打开某些目标 =&#34;_blank&#34;链接,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/31955880/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/31955880/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: html - WKWebView 未打开某些目标 =&#34;_blank&#34;链接