我正在 IE 中编写 BHO(浏览器助手对象),我需要跟踪重定向。
最初我认为 BeforeNavigate2 事件将是我需要的事件,但我了解到它实际上主要用于帧。接下来我发现 WebBrowserEvents2 的 NavigateComplete2 事件似乎在重定向时被触发了两次。但我不知道我的观察是否正确,也不知道如何判断一系列 NavigateComplete2 事件是由于重定向还是用户点击造成的。请指教!
我正在 IE 中编写 BHO(浏览器助手对象),我需要跟踪重定向。
最初我认为 BeforeNavigate2 事件将是我需要的事件,但我了解到它实际上主要用于帧。接下来我发现 WebBrowserEvents2 的 NavigateComplete2 事件似乎在重定向时被触发了两次。但我不知道我的观察是否正确,也不知道如何判断一系列 NavigateComplete2 事件是由于重定向还是用户点击造成的。请指教!
在与您的情况类似的情况下,NavigateComplete2 被浏览器对象中的单独框架触发,我发现DocumentComplete起到了作用,等待所有帧在触发之前加载。也许这对您的情况有帮助?
我在大量的试验和错误中发现,如果您比较从 BeforeNavigate2 传递的浏览器界面指针与您在创建 BHO 时获得的指针,您可以找出真正的起始 url 是什么。当它们相同时,传递给 BeforeNavigate2 的 url 就是您需要的。您需要将其与您从 NavigateComplete2 获得的进行比较。如果它们不同,则表示重定向。一个问题是打开一个新窗口时。在这种情况下,您还需要关注 NewWindow 事件并进行一些特殊处理(当打开新窗口时,BeforeNavigate2 URL 也将传递给 NavigateComplete2,因此您需要设置一个标志并进行相应的处理)。