如何区分用户单击链接和执行自动重定向的页面?

在我的WinForms应用程序中有一个C# WebBrowser控件 ,并且知道Navigating事件 ,我从来没有想出一个漂亮而优雅的解决方案:

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

对于案例1 ,我可以想到一些案例:

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

对于案例2,我可以想象:

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

所以我的问题是:

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

更多信息

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

(请注意,我确实认为这不是此SOpost的重复)

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

您似乎正在尝试实现反广告/弹出/重定向模式。

从网络浏览器的角度来看..点击 window.location = "https://stackoverflow.com/questions/14050548/how-to-distinguish-between-a-user-clicking-a-link-and-the-page-doing-an-automati/some.url";与javascript window.location = "https://stackoverflow.com/questions/14050548/how-to-distinguish-between-a-user-clicking-a-link-and-the-page-doing-an-automati/some.url";没有什么不同window.location = "https://stackoverflow.com/questions/14050548/how-to-distinguish-between-a-user-clicking-a-link-and-the-page-doing-an-automati/some.url";302重定向响应。 没有明确的信号,没有这样的便利方法。

WebBrowser控件只是IE组件的代理。 你不能拦截浏览器的引擎,甚至禁用/启用javascript,因为它是互联网安全选项的一部分。

您必须创建特殊逻辑以防止每种可能的重定向情况。

例如。 validationHTML字符串然后在渲染之前使用Regex.Replace限制某些javascript模式,标题或iframe。

 var scriptEx = new Regex(" 

或拦截导航URL并取消不安全的URL等。