C# 是否可以使用BHO(IE8)跟踪用户点击的链接

C# 是否可以使用BHO(IE8)跟踪用户点击的链接,c#,internet-explorer-8,bho,C#,Internet Explorer 8,Bho,阅读有关BHO的文章,我知道我可以看到跟踪用户导航的方法——但是——BHO是否可以识别用户点击了哪个链接(例如,如果页面上存在两个链接,用户可以点击导航到目的地a——是否可以确定实际点击了哪个链接) 是的,你可以。一个BHO是在IE进程内部运行的C++代码,因此它可以访问所有的内存,并且可以在它里面做任何事情(对进程之外的事物做一个单独的主题,并且被IE严重限制)。< /P> < P>你有两个相同的链接,你想知道哪个被点击了吗? 为什么不为每个URL添加一个唯一的URL参数: <a hre

阅读有关BHO的文章,我知道我可以看到跟踪用户导航的方法——但是——BHO是否可以识别用户点击了哪个链接(例如,如果页面上存在两个链接,用户可以点击导航到目的地a——是否可以确定实际点击了哪个链接)

是的,你可以。一个BHO是在IE进程内部运行的C++代码,因此它可以访问所有的内存,并且可以在它里面做任何事情(对进程之外的事物做一个单独的主题,并且被IE严重限制)。< /P> < P>你有两个相同的链接,你想知道哪个被点击了吗? 为什么不为每个URL添加一个唯一的URL参数:

<a href='mylink.html?tracking=linkA'>click me</a>
<a href='mylink.html?tracking=linkB'>click me</a>

然后,服务器日志将告诉您单击了哪个。不需要任何特定于IE的黑客攻击。

如果您可以访问元素(有时您不需要,例如另一个域中某个帧中的元素),则可以

哦,记住在BeforeNavigate2中分离事件


问题是没有可靠的方法检测页面刷新以重新连接事件或处理从脚本(Ajax)生成的元素。

否,我将不显示示例代码或告诉您如何执行此操作。在过去的三年里,我一直在微软的BHOs上工作,我们与IE团队紧密合作。所以,我已经听了足够多的恐怖故事,并亲眼目睹(并在内部造成:-)一个写得不好或恶意的BHO可能对用户体验造成的破坏。你给了我一些想法-我会沿着正确的道路做类似的事情吗:哦,我的上帝!不要在页面中插入HTML或JS!没有安全的方法可以保证这样做不会破坏页面本身。正是这样的想法让用户相信IE是每个人描述的怪物-((Alos,不要使用C来编写BHO!有两个原因-1)您不拥有该进程,因此无法保证加载了正确的.Net版本,因此您可能会与另一个BHO冲突;2)这将对内存集产生严重影响,并且浏览器中的browser.CLR/IE问题在.NET 4.0及以后版本中的性能有所下降,SxS的故事也不错,但这并不能减少将CLR对象加载到浏览器/IE中的危害。:)我无法控制用户可以浏览的站点,因此这不起作用。请注意,对于在DocumentComplete事件后修改DOM并添加指向DOM的链接的AJAX页面,这不起作用。