如何区分用户点击链接和页面进行自动重定向

本文关键字:重定向 何区 用户 链接 | 更新日期: 2023-09-27 17:49:50

在我的WinForms应用程序中有一个c# WebBrowser控件,并且意识到Navigating事件,我从来没有想出一个很好的和优雅的解决方案:

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

对于情况1,我可以想到以下几种情况:

  • 用户点击a标签,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加载。

(请注意,我相信这不是这个SO帖子的副本)

如何区分用户点击链接和页面进行自动重定向

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

似乎你正在努力实现反广告/弹出/重定向模式。

从web浏览器的角度…点击<a href="some.url">与javascript window.location = "some.url";302重定向响应没有什么不同。没有显式的信号,没有这样方便的方法。

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

你必须创建特殊的逻辑来防止所有可能的重定向情况。

。验证HTML字符串,然后用正则表达式限制一些javascript模式,头或iframe。渲染前替换

var scriptEx = new Regex("<script (.*?)</script>");
var iframeEx = new Regex("<iframe (.*?)</iframe>");

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