У нас есть объект справки браузера (BHO), написанный на C #, который прекрасно работает в IE8. Однако доступ к тегам и атрибутам в пространстве имен больше не работает в 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 рассматривает «acme: initial» как один текстовый токен, в то время как IE9 пытается быть более осведомленным о пространстве имен, используя «acme» в качестве префикса пространства имен.
Использование getAttributeNS кажется целесообразным, но, похоже, не работает:
IHTMLElement6 element6 = (IHTMLElement6)element;
String initial6 = (String)element6.getAttributeNS("http://www.acme.com/2007/acme",
"initial");
В приведенном выше примере element6 имеет значение mshtml.HTMLInputElementClass, но initial6 имеет значение null.
Поскольку ни старый подход с использованием текстовых токенов, ни пространства имен не работает, похоже, мы застряли.
Было бы также хорошо выполнить итерацию по фактическим атрибутам элемента, если включены атрибуты с префиксом пространства имен.
Есть ли способ с установленным IE9, чтобы получить значение атрибута с префиксом пространства имен?
Некоторые детали:
PIA по умолчанию для Microsoft.mshtml.dll - версия 7.
IE9 использует mshtml.dll версии 9.
Мы используем c: \ C: \ Windows \ System32 \ mshtml.tlb (устанавливается с IE9) для генерации недостающих интерфейсов, таких как IHTMLElement6, и включаем их в наш проект.
Мы успешно использовали эту технику в прошлом для других различий IE (N-1), IE (N).