Все работает с html страницей, а с xul страницей никак

Выделить код

Код:

function test2(){
    var tn = window.document.createElement("script");
    tn.textContent = "function test72(){alert('test72');}";
    window.document.lastChild.firstChild.appendChild(tn); }//добавляем в <head>

<button label="button1" onclick="test72()"/>
<button label="button2" onclick="test2()"/>

После загрузки страницы кликая на "button1" нет ничего,
после того как кликнем на button2, появляется функция test72
И кликая на "button1" еще раз уже имеем результат.

С xul страницей что-то никак не получается добавить динамически скрипт делая тоже самое..

mozIJSSubScriptLoader.loadSubScript()
И можно попробовать

Выделить код

Код:

var script = document.createElementNS("http://www.w3.org/1999/xhtml", "script");
script.textContent = "alert('Ok');";
document.documentElement.appendChild(script);

кстати, вопрос,
кто-нибудь пользуется XUL GEAR?

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

05-01-2014 19:33:38

Infocatcher пишет

mozIJSSubScriptLoader.loadSubScript()
И можно попробовать

Выделить код

Код:

var script = document.createElementNS("http://www.w3.org/1999/xhtml", "script");
script.textContent = "alert('Ok');";
document.documentElement.appendChild(script);

Спасибо большое, Infocatcher,
что только я уже не перепробовал...
Не совсем понятно про Name spaces, но главное работает!

YuryL пишет

кто-нибудь пользуется XUL GEAR?

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

Я не пользуюсь, но, судя по консоли ошибок, надо сказать спасибо оптимизаторам, выпилившим «ненужный» E4X.


YuryL пишет

Не совсем понятно про Name spaces, но главное работает!

Ну, в явном виде это нигде не описано, но у <xul:script>, как минимум, отличается реализация:

Выделить код

Код:

var xulScript = document.getElementsByTagNameNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "script")[0];
var htmlScript = content.document.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "script")[0]; // в текущей вкладке должна быть открыта HTML-страничка со скриптами
alert("XUL:\n" + testNode(xulScript) + "\n\nHTML:\n" + testNode(htmlScript));
function testNode(node) {
    return [
        "Element: " + (node instanceof Element),
        "HTMLScriptElement: " + (node instanceof HTMLScriptElement),
        "XULElement: " + (node instanceof XULElement)
    ].join("\n");
}
Выделить код

Код:

XUL:
Element: true
HTMLScriptElement: false
XULElement: true

HTML:
Element: true
HTMLScriptElement: true
XULElement: false