WKWebView and window.open

29

网站上许多链接似乎在他们的onclick句柄中使用window.open,但WKWebView似乎完全忽略window.open。

有没有解决办法?

我尝试将javaScriptCanOpenWindowsAutomatically偏好设置为true,但似乎没有帮助。

1个回答

52

当Web应用程序在JavaScript中调用window.open()时,WKWebView将在其UIDelegate上调用webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:方法。

在该代理方法中,您应该使用提供给您的WKWebViewConfiguration创建一个新的WKWebView。如果您将这个新的WKWebView呈现在屏幕上,它将会加载正确的内容。

这在WKUIDelegate文档中有记录,尽管没有明确说明这是由于window.open()而调用的。


1
你能添加如何使用JavaScript完成这个任务的信息吗?我正在使用Cordova!:D - mesqueeb
很明显,您需要委托您的 webView.uiDelegate 以实现 createWebViewWith configuration。如果您从 UIWebView 迁移到 WKWebView,则需要这样做,因为 window.open 不起作用。 - vberihuete
1
你好 @Stefan,方法 createWebViewWithConfiguration 为什么没有被触发可能是什么问题?尽管我的 WebView 已经设置了代理?如果您能提供一些建议,我将不胜感激。详细问题请参见此处:https://stackoverflow.com/questions/60851538/wkwebview-does-not-trigger-method-createwebviewwithconfiguration - Tommy Leong
对于错过了的人,你需要设置 web.configuration.preferences.javaScriptCanOpenWindowsAutomatically = true(在iOS中默认为false)。 - bendytree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接