c# - 如何区分用户点击链接和页面自动重定向?

标签 c# .net winforms redirect webbrowser-control

拥有 C# WebBrowser control在我的 WinForms 应用程序中,并意识到 Navigating event , 我从来没有想出一个很好的优雅的解决方案来解决以下问题:

  1. 如果用户主动导航到另一个 URL,我想允许它。
  2. 如果页面“自行”重定向到另一个 URL,我想取消它。

对于情况1,我能想到的有以下几种情况:

  • 用户点击一个 a 标签,然后评估 href 属性以加载另一个 URL。
  • 用户单击带有 onclick javascript 事件处理程序的元素,该事件处理程序调用使用 window.location 加载另一个 URL 的函数。

对于情况2我可以想象:

  • 加载的页面包含一个 iframe 标记,用于在 IFrame 中加载一个 URL。这会触发 Navigating 事件。
  • 有一些 JavaScript 计时器在页面加载时启动,当它触发时,它使用 window.location 加载另一个 URL。
  • 加载的页面包含 meta refresh header tag几秒钟后加载另一个 URL。

所以我的问题是:

如何在 Navigating 事件(或任何其他机制)中检测重定向是由用户显式触发还是由页面隐式触发?

更多信息

  • WebBrowser 正在基于 Windows 的 CMS 后端应用程序中使用。
  • 因此,我可以完全控制 WebBrowser 控件中加载的内容。
  • 这意味着如果需要,我可以在发送到浏览器之前处理完整的 HTML 字符串。
  • 如果它更适用,我也很想获得纯 JavaScript 的解决方案,我可以将其注入(inject)到正在加载的 HTML 中。

(请注意,我相信这不是 this SO posting 的副本)

最佳答案

我对此的看法是捕获用户对网络浏览器控件的点击。让它设置一个标志,指示用户单击了网络浏览器。如果标志为真,则允许重定向,如果不为真,则不允许。如果没有(或之后)进行重定向,请确保在 n 秒后重置标志。

关于c# - 如何区分用户点击链接和页面自动重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14050548/

相关文章:

c# - Json.NET Uri(反)序列化错误

c# - 为什么我的 C# "hello world"COM 客户端和服务器会抛出强制转换异常?

c# - 如何在 app.config 中创建自定义标签

c# - 暴露底层控制的事件

c# - 每当我可以很好地练习时是否使用静态类?

c# - 阅读文本的第二行

c# - 应用程序中对 webservice 方法的多个异步调用失败并出现异常

c# - 如何防止 SelectedIndexChanged 事件在从列表框中删除项目后在列表框中触发

.net - 将 .NET Core 后端添加到 Aurelia 项目

javascript - 使用 javascript 从 CefSharp 浏览器获取文本框值