2012-03-23 56 views
1

我有以下問題: 我正在爲Internet Explorer編寫擴展。在這個過程中,我遍歷DOM並搜索某些關鍵字。這些關鍵字應該突出顯示,並在點擊時調用javascript函數。 遍歷和突出顯示作品。但是我堅持使用onclick事件。 我嘗試了幾種不同的方法:Internet Explorer BHO add onclick event

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

相反聯事件處理程序,使用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'); }); 
} 
+0

大概我不夠具體。我正在用C#編寫一個BHO。還有功能的addEventListener和附加事件不存在IHTMLElement也不IHTMLDOMNode 我利用IHTMLSpanElement中的attachEvent嘗試過,但是這一次需要一個PDISP對象 – 2012-03-26 09:03:08

0

我不認爲你可以設置的「onClick」處理程序,也沒有我不認爲你可以的attachEvent,除非互操作層是做魔法我不知道的。

從IHTMLElement獲取事件的本地方法是對IConnectionPointContainer的QueryInterface(支持事件的COM中的所有內容實現此接口),然後使用方法FindConnectionPoint。您正在查找的連接點具有disp接口ID:DIID_HTMLElementEvents2。一旦你獲得連接點,你建議(即調用advise方法)。你給它一個回調對象(在COM中,它被稱爲「sink」),它實現了disp接口IHTMLElementEvents2 - 你應該實現的方法之一是點擊。

在C#土地,你將廣泛地使用互操作服務(System.Runtime.InteropServices命名空間)。首先,你需要引用MSHTML(不確定,但我認爲它已經有一個互操作程序集,否則只是從COM引用)。看看這篇文章COM連接點:http://msdn.microsoft.com/en-us/magazine/cc163361.aspx