В общем, как известно в мозилле пока(?) не работает прозрачная поддержка этих технологий, тобишь такой код:

Выделить код

Код:

var xml= XML (document);

выдаёт невразумительную ошибку.
ну да ладно, любой элемент можно сериализовать и полученную строку отдать в XML конструктор. но проблема с обратным преобразованием.
в HTML есть свойство innerHTML, которое бы тут могло помочь, но в XUL такого нет :( пробовал натравливать DOMParser, но справедливо получал ошибку о том, что нельзя элемент из одного документа перенести в другой.
в общем, есть ещё какие-нибудь решения, а то от E4X отказываться очень не хочется?..

пробовал натравливать DOMParser, но справедливо получал ошибку о том, что нельзя элемент из одного документа перенести в другой.

Вот этим кодом я перенес кнопку из открытого в браузере xul-документа в интерфейс самого браузера.

Выделить код

Код:

var x = getBrowser (). contentDocument. getElementsByTagName ("button") [0];
var ser = new XMLSerializer ();
var str = ser. serializeToString (x);
default xml namespace = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
var button = XML (str);
button. description = <description>new button</description>;
button = new DOMParser (). parseFromString (button, "text/xml");
var gobutton = document. getElementById ("go-button");
gobutton. parentNode. appendChild (button. documentElement);

ну, фактически загруженный  xul-документ находится в том же доме, что и весь интерфейс браузера, хотя, странно, что после преобразования в строку и обратно он сохранил эту информацию...

в общем, решение я нашёл - методы importNode или adoptNode позволяют вставлять узлы из других документов.

только вот после парсинга узлы перемежаются с пустыми текстовыми узлами... даже если узлы писать без пробелов... xml.prettyPrinting=false помогло

А тут ничего нет полезного: http://developer.mozilla.org/en/docs/E4X ?

Lynn, ну да, баги почитал, поплакал... (T_T)
жаль, что в 1.9 нас не ожидает светлое е4х будущее..