Cocoa:WKWebView/WebView无法在Gmail或Inbox中打开链接

4
我是 Boxy 的开发者,它是一个著名的 Inbox by Gmail 本地封装器。自从开发以来,我一直在苦苦挣扎,想知道是否有人能帮助我解决问题。
问题是:在 inbox.google.comgmail.com 上的链接与其他网站上的链接处理方式不同:点击它们不会在我的 webview 上触发导航操作(具体来说,我正在使用一个 WKWebView,但是使用旧的 WebView 也存在这个问题)。所以当需要在外部浏览器中打开链接时,我很难做到。
因此,在撰写本文时,我依赖于一个可怕的 hack 来打开链接:使用 javascript 拦截 document.body 上的点击事件(使用事件监听器),然后通过调用原生应用程序强制在外部浏览器中打开它们。 我最好的猜测是 Gmail/Inbox 应用程序执行了一些 javascript 魔法,以便跟踪邮件内所有链接的点击。不知何故,这干扰了标准行为。 有人知道我如何解决这个问题吗?

我已经尝试过的事情

  • 实现 WKUIDelegate 的方法 -webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:。没有用:该方法被调用,但与 navigation action 相关联的 request 是空的。

你的意思是使用这个 -> [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://google.com"]]; 来加载链接吗? - esh
两年后。你找到解决方案了吗?我也卡在同样的问题上了。 - Larry
@Francesco,你找到解决方案了吗? - Jérôme Beau
1个回答

0
我找到了一个解决方案。这个问题是由于当点击链接时,Gmail试图打开一个about:blank的窗口,然后运行JavaScript来重定向链接,而不是使用target=_blank打开。你需要确保Gmail能够正确接收创建窗口的句柄。
- (WKWebView *)webView:(WebUI *)webView
createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration
forNavigationAction:(WKNavigationAction *)navigationAction
windowFeatures:(WKWindowFeatures *)windowFeatures

您需要确保该委托方法正确返回新创建的wkwebview。


你似乎是对的...但是从这个回调函数返回我的新webview似乎不起作用,好像返回的wkwebview与Google用于查找它的标准不匹配。你确定了Google查找新标签页的确切方式吗? - Jérôme Beau

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