Javascript Internet Explorer BHO添加onclick事件

Javascript Internet Explorer BHO添加onclick事件,javascript,internet-explorer,dom,bho,Javascript,Internet Explorer,Dom,Bho,我有以下问题: 我正在为internet explorer编写扩展。在这个过程中,我遍历DOM并搜索某些关键字。这些关键字应突出显示,单击时应调用javascript函数。 遍历和突出显示工作。但我被onclick事件困住了。 我尝试了几种不同的方法: IHTMLAttributeCollection attributes = element.attributes; if (attributes != null) { for (int i

我有以下问题: 我正在为internet explorer编写扩展。在这个过程中,我遍历DOM并搜索某些关键字。这些关键字应突出显示,单击时应调用javascript函数。 遍历和突出显示工作。但我被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()");
IHTMLAttributeCollection attributes=element.attributes;
如果(属性!=null)
{
for(int i=0;i
这两个函数在DOM中创建正确的文本,但没有给出功能

另一种方法是使用innerHTML属性。这一个工作,但它是真正可怕的使用,因为我不能区分文本和新的开始

IE似乎没有解析属性

我感谢你的支持


cheers

使用
attachEvent
addEventListener
(对于非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'); });
}

使用
attachEvent
addEventListener
(对于非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'); });
}

我不认为您可以设置“onclick”处理程序,也不认为您可以附加事件,除非互操作层正在执行我不知道的魔法

从IHTMlement获取事件的本机方法是查询IConnectionPointContainer的接口(COM中支持事件的所有内容都实现此接口),然后使用FindConnectionPoint方法。您正在查找的连接点具有disp接口ID:DIID_HTMLElementEvents2。一旦你得到连接点,你建议(即调用建议方法)。您给它一个回调对象(在COM中,它被称为“sink”),它实现disp接口IHTMLElementEvents2——您应该实现的方法之一是单击


在C#land中,您将广泛使用互操作服务(System.Runtime.InteropServices命名空间)。首先,您需要引用MSHTML(不确定,但我认为它已经有一个互操作程序集。否则,只需引用COM)。看看这篇关于COM中connecton point的文章:

我认为您不能设置“onclick”处理程序,也不能附加事件,除非互操作层正在执行我不知道的魔法

从IHTMlement获取事件的本机方法是查询IConnectionPointContainer的接口(COM中支持事件的所有内容都实现此接口),然后使用FindConnectionPoint方法。您正在查找的连接点具有disp接口ID:DIID_HTMLElementEvents2。一旦你得到连接点,你建议(即调用建议方法)。您给它一个回调对象(在COM中,它被称为“sink”),它实现disp接口IHTMLElementEvents2——您应该实现的方法之一是单击


在C#land中,您将广泛使用互操作服务(System.Runtime.InteropServices命名空间)。首先,您需要引用MSHTML(不确定,但我认为它已经有一个互操作程序集。否则,只需引用COM)。请看这篇关于COM上connecton point的文章:

米格尔·安杰洛(Miguel Angelo)在这里给出的非常有用的答案就可以做到这一点。我相信他做的正是你想做的。他的BHO插件突出显示文本并插入onclick简单javascript函数。
祝你的插件好运

米格尔·安杰洛(Miguel Angelo)在这里给出了一个非常有用的答案。我相信他做的正是你想做的。他的BHO插件突出显示文本并插入onclick简单javascript函数。
祝你的插件好运

可能我不够具体。我正在用C#写一本BHO。对于IHTMLElement和IHTMLDOMNode,addEventListener和attach Event函数不存在。我尝试使用ihtmlsPanelElement中的attachEvent,但是这个函数需要一个pdisp对象。可能我不够具体。我正在用C#写一本BHO。在那里,对于IHTMLElement和IHTMLDOMNode,addEventListener和attach Event函数都不存在。我尝试使用ihtmlsPanelElement中的attachEvent,但这个函数需要一个pdisp对象