High Sierra WebView 阻止锚标记导航

Posted

技术标签:

【中文标题】High Sierra WebView 阻止锚标记导航【英文标题】:High Sierra WebView blocks anchor tag navigation 【发布时间】:2018-05-04 07:23:21 【问题描述】:

我有一个在 WebView 中显示信息的 Mac 应用程序。现在和 Objective-C 中的一个相当老的应用程序,我很快就忘记了。

WebView 包含允许在页面内导航的锚标记,可以通过单击所显示页面中的链接或单击 UI 中的选项卡将 javascript 发送到 WebView。在 High Sierra 中,这不再有效,尽管它没有显示错误。

看来我需要实现isKeyExcludedFromWebScript:,但我的尝试失败了。

我需要对 WebView 进行子类化吗?将 isKeyExcludedFromWebScript:isSelectorExcludedFromWebScript: 放在包含 WebView 的视图控制器中不起作用 - 它们永远不会被调用。

如果有人有任何建议或示例,我将不胜感激。 恐怕答案是升级应用程序以使用 WKWebView,但我希望能快速解决,直到我有时间这样做。

【问题讨论】:

【参考方案1】:

在这里回答我自己的问题,因为我已经制定了解决方案。

问题是我正在将一个 html 字符串加载到 WebView 中,当我尝试使用内部导航链接时,它没有用作前缀的基本 URL,因此锚导航无法正常工作。

在 High Sierra 之前它曾经工作过,所以 WebView 的运作方式肯定有一些新的东西。

解决方案是将 HTML 字符串保存到临时文件,并让 WebView 加载该文件的 URL,而不是直接加载字符串。

这适用于 WebView 和 WKWebView。

【讨论】:

以上是关于High Sierra WebView 阻止锚标记导航的主要内容,如果未能解决你的问题,请参考以下文章

如何制作macos high sierra安装u盘

下载macOS high sierra失败,使用已购页面再试一次怎么弄

如何以编程方式在 macOS Sierra/High Sierra 上创建 PPTP *** 连接?

High Sierra FAQ

阻止锚点父元素点击事件

markdown 在macOS High Sierra上安装多个Java版本