【发布时间】:2022-08-22 18:48:28
【问题描述】:
在我的 WinForms 应用程序中,我使用 WebView2 来显示第三方内容。
当用户单击 webView 内的链接(或其他导航元素)时,目标链接应在默认浏览器中打开(而不是在 webView 中)。
在大多数情况下,我能够使用NewWindowRequested 和NavigationStarting 事件实现所需的行为。
但是对于当前页面 (<a href=\"#my_anchor\">) 内的锚导航,这些事件不会触发。
有一个SourceChanged 事件,在锚导航时触发,它甚至允许通过检查IsNewDocument 来确定这是in-page 导航,但它不允许取消导航。
我正在考虑基于 js 的解决方案,例如为所有 a 标签甚至整个 document 订阅 click 事件并进行进一步过滤。但我意识到这样的解决方案在许多重要的情况下都行不通,包括
- 动态创建
a元素 - 键盘导航(TAB 选择链接,Enter 启动操作,所以没有
click事件) -
a元素内部有很多元素(img等)并且用户单击此类内部元素的情况 - 当使用 js 启动导航时
那么,是否存在处理和取消 任何导航,包括当前页面中的锚点?