Подскажите как наиболее правильно и без создания тяжеловесных XPCOM компонентов распарсить HTML entity из XPCOM JavaScript компонента?
Надо распарсить всякие последовательности вида & #9829; &.

Раньше когда весь код работал на уровне отдельно окна, то я создавал через document.createElement новый iframe и запиcывал в него всю строку, потом вручную заменял оставшиеся 4 последовательности < >   & и всё было хорошо, но в XPCOM нету объекта document.

Есть идея через nsIWindowMediator получать любое окно и всё делать уже через window.document, но нет уверенности что у любого окна будет document. Т.е. основное окно Firefox может быть уже закрыто, а останется маленькое окошко открытое каким-нибудь расширением.

http://xpoint.ru/forums/programming/XUL/thread/42796.xhtml

В XPCOM нет javascript-ового объекта DOMParser, но можно создать объект с интерфейсом nsIDOMParser.

Выделить код

Код:

var parser = Components. classes ["@mozilla.org/xmlextras/domparser;1"]. createInstance (Components. interfaces. nsIDOMParser);
var s = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><root>&#38;#9829;&amp;</root>';
s = parser. parseFromString (s, "text/xml"). documentElement. textContent;

p. s. Есть еще nsIScriptableUnescapeHTML (https://developer.mozilla.org/En/NsIScriptableUnescapeHTML). С ним чуть проще:

Выделить код

Код:

var gUnescapeHTML = Components.classes["@mozilla.org/feed-unescapehtml;1"]
                              .getService(Components.interfaces.nsIScriptableUnescapeHTML);
var s = "&#38;#9829;&amp;";
s = gUnescapeHTML. unescape (s);