Internet Explorer BHO添加onclick事件

时间:2012-03-23 14:13:35

标签: javascript internet-explorer dom bho

我有以下问题: 我正在为Internet Explorer编写扩展程序。在这个过程中,我正在遍历DOM并搜索某些关键字。这些关键字应突出显示,点击时应调用javascript funktion。 遍历和突出显示的工作。但是我坚持使用onclick事件。 我尝试了几种不同的方法:

 IHTMLAttributeCollection attributes = element.attributes;
        if (attributes != null)
        {
            for (int i = 0; i < attributes.length; i++)
            {
                IHTMLDOMAttribute a = attributes.item(i);

                if (a.nodeName.Equals("onclick"))
                {
                    a.nodeValue = "alert()";
                }
            }
        }


element.setAttribute("onclick", "javascript:alert()");

这两个在DOM中创建了正确的文本,但没有给出功能。

另一种方法是使用innerHTML属性。这个有用,但使用起来非常糟糕,因为我无法区分文本和新的起点。

似乎IE不解析属性

我感谢任何支持

欢呼声

3 个答案:

答案 0 :(得分:1)

米格尔·安吉洛在这里做出了令人难以置信的有用答案。How to get started with developing Internet Explorer extensions?。我相信他完全按照你要做的去做。他的BHO插件突出显示文本并插入onclick简单的javascript函数。 祝你的插件好运!

答案 1 :(得分:0)

使用attachEventaddEventListener(对于非IE浏览器)而不是内联事件处理程序,这是用于事件注册的JavaScript API。

if (element.addEventListener) {  // all browsers except IE before version 9
    element.addEventListener("click", function(){ alert('clicked'); });
}
else if (element.attachEvent) {   // IE before version 9
    element.attachEvent("onclick", function(){ alert('clicked'); });
}

答案 2 :(得分:0)

我认为你不能设置'onclick'处理程序,也不认为你可以使用attachEvent,除非Interop层正在做我不知道的魔法。

从IHTMLElement获取事件的本地方法是IConnectionPointContainer的QueryInterface(COM中支持事件的所有内容实现此接口),然后使用FindConnectionPoint方法。您要查找的连接点具有disp接口ID:DIID_HTMLElementEvents2。一旦获得连接点,就建议(即调用advise方法)。你给它一个回调对象(在COM中,它被称为“接收器”),它实现了disp接口IHTMLElementEvents2 - 并且你应该实现的一个方法是点击。

在C#land中,您将广泛使用互操作服务(System.Runtime.InteropServices命名空间)。首先,您需要引用MSHTML(不确定,但我认为它已经有一个互操作程序集。否则,只需从COM引用)。请看一下COM中的连接点:http://msdn.microsoft.com/en-us/magazine/cc163361.aspx