我們有一個用C#編寫的瀏覽器幫助對象(BHO),在IE8中工作得很好。但是,訪問名稱空間中的標記和屬性不再適用於IE9。例如,如何使用mshtml在IE9中使用命名空間前綴獲取屬性?
<p xmlns:acme="http://www.acme.com/2007/acme">
<input type="text" id="input1" value="" acme:initial="initial"/>
</p>
在IE8以下工作:
IHTMLElement element = doc.getElementById("input1");
String initial = element.getAttribute("evsp:initial", 0) as String;
IE8對待「極致:初始」作爲一個文本標記,而IE9試圖更加感知名稱空間以「極致」的命名空間字首。
使用getAttributeNS似乎是恰當的,但它似乎並沒有工作:
IHTMLElement6 element6 = (IHTMLElement6)element;
String initial6 = (String)element6.getAttributeNS("http://www.acme.com/2007/acme",
"initial");
在上面,元素6被設置爲mshtml.HTMLInputElementClass,但initial6爲空。
由於既沒有舊的文本標記也沒有命名空間的方法,它看起來像我們被卡住了。
如果包含具有命名空間前綴的屬性,那麼遍歷元素的實際屬性也可以。
是否有一種方式與IE9安裝獲取名稱空間前綴屬性的值?
一些細節: 的Microsoft.mshtml.dll默認PIA是版本7 IE9使用的Mshtml.dll版本9 我們使用C:\ C:\ WINDOWS \ SYSTEM32 \ MSHTML.tlb的(安裝了IE9 )來生成缺少的接口,如IHTMLElement6,並將其包含在我們的項目中。 我們已經成功地將其用於其他IE(N-1),IE(N)的差異。