我有以下问题: 我正在为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不解析属性
我感谢任何支持
欢呼声
答案 0 :(得分:1)
米格尔·安吉洛在这里做出了令人难以置信的有用答案。How to get started with developing Internet Explorer extensions?。我相信他完全按照你要做的去做。他的BHO插件突出显示文本并插入onclick简单的javascript函数。 祝你的插件好运!
答案 1 :(得分:0)
使用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'); });
}
答案 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