4

我一直在研究用 C# 编写的 BHO/工具栏,它监听浏览器当前网页上引发的 HTML 事件。该解决方案包括一个名为 HtmlPageEventManager 的可重用类,其目的是为每个打开的新网页订阅给定的 HTML 事件列表。目标是在用户可以开始与页面元素交互时立即附加处理程序,甚至在页面加载完成之前。使用这个类很简单——只需调用构造函数:

var evts = 新列表() {
    HtmlEvent.onclick, HtmlEvent.ondblclick, HtmlEvent.onkeydown,
    HtmlEvent.onselectstart,HtmlEvent.onselectionchange,
    HtmlEvent.onfocus,HtmlEvent.onselect
};
新的 HtmlPageEventManager(this, evts, this.HtmlEventHandler);

在此处下载我的解决方案进行试用并向我发送反馈。如果您觉得它有用,请随意在您自己的项目中使用它。尽管它运行良好,但有时它无法附加事件。我很难确定这些情况。所以我可以使用一些帮助来改进 HtmlPageEventManager。

我的解决方案引用了 SpicIE的程序集,但它们不包含在上述下载中,因此您需要从SpicIE 网站获取它。顺便说一句,这可能是问的好时机:SpicIE 有多受欢迎?有什么更好的工具可以使用吗?

4

2 回答 2

2

是的!我通过订阅 BHO 的 DownloadComplete 事件克服了“刷新”问题,在该事件中我再次调用附加 HTML 事件处理程序的“RegisterEventHandlers”辅助方法。链接到的代码 jeffamaphone 很有帮助。我结合了它的“normalPageLoad”成员变量的想法来有条件地调用RegisterEventHandlers。我还查看了随附的论坛帖子。不过,我无法理解对父窗口的 Loaded 事件的强调。我什至没有做那部分就让我的代码工作了。无论如何,我认为 HtmlPageEventManager 现在功能齐全——敲木头。如果您发现它仍然无法正常工作,请大声告诉我。

于 2009-09-15T03:16:12.197 回答
0

您会发现在页面加载期间没有 100% 的解决方案可以为 IE 执行此操作。这不是你的错:IE 的事件模型是一大堆异步代码,很难做到正确。如果你有一个 95% 的解决方案,我会说开心并继续前进。

于 2009-09-12T19:37:58.497 回答