在我的WinForms应用程序中有一个C#WebBrowser
control,并且知道Navigating
event,我从未想出过以下的优秀解决方案:
对于案例1 ,我可以想到一些案例:
a
标记,评估href
属性以加载其他网址。onclick
javascript事件处理程序的元素,该处理程序调用使用window.location
加载其他网址的函数。对于案例2 ,我可以想象:
iframe
标记,用于在IFrame中加载网址。这会触发Navigating
事件。window.location
加载另一个URL。meta refresh
header tag,可在几秒钟后加载另一个网址。所以我的问题是:
如何在Navigating
事件(或任何其他机制)中检测重定向是由用户显式触发还是由页面隐式触发?
更多信息
WebBrowser
正在基于Windows的CMS后端应用程序中使用。(请注意,我确实认为这不是this SO posting的重复)
答案 0 :(得分:1)
我对此的看法是捕获用户对Web浏览器控件的点击。让它设置一个标志,指示用户点击了Web浏览器。如果该标志为真,则允许重定向,如果不是,则不允许它。如果没有(或之后)重定向,请确保在n秒后重置标志。
答案 1 :(得分:1)
您似乎正在尝试实现反广告/弹出/重定向模式。
从网络浏览器的角度来看..点击<a href="some.url">
与javascript window.location = "some.url";
或 302重定向响应没有什么不同。没有明确的信号,没有这样的便利方法。
WebBrowser控件只是IE组件的代理。你不能拦截浏览器的引擎,甚至禁用/启用javascript,因为它是互联网安全选项的一部分。
您必须创建特殊逻辑以防止每种可能的重定向情况。
例如。 验证HTML字符串然后在渲染之前用Regex.Replace限制一些javascript模式,标题或iframe。
var scriptEx = new Regex("<script (.*?)</script>");
var iframeEx = new Regex("<iframe (.*?)</iframe>");
或拦截导航网址并取消不安全的网址等