Динамическая загрузка скрипта
От: M_DENIS  
Дата: 23.05.06 07:57
Оценка:
Здравствуйте

наткнулся на такой момент
динамическое изменение документа через innerHTML или insertAdjacentHTML
вставляемая строка содержит скрипт
так вот, при первой вставке скрипт выполняется, при последующих нет

пример


HTML>
<SCRIPT>
var count = 0;
function insertScript(){
    var sHTML="<input type=button onclick=" + "go2()" + " value='Click Me " + (count++) + "'><BR>";
    var sScript="<SCRIPT DEFER>alert('tt');";
    sScript = sScript + "function go2(){ alert('Hello from inserted script.') }";
    sScript = sScript + "</SCRIPT" + ">";
    ScriptDiv.innerHTML = sHTML + sScript;
}    
</SCRIPT>
<BODY onload="">
    <DIV ID="ScriptDiv"></DIV>
    <A HREF="#" onclick="insertScript()">click</A>
</BODY>
</HTML>


кликать на ссылку
HTML перегенерируется, надпись на кнопке меняется, а алерт 'tt' только на первый клик появляется

есть какое-нибудь лекарство от этого?
Re: Динамическая загрузка скрипта
От: Аноним  
Дата: 23.05.06 14:00
Оценка:
M_D>динамическое изменение документа через innerHTML или insertAdjacentHTML
M_D>вставляемая строка содержит скрипт

А если через DOM ?
Ссылка была гдето на http://ru.wikipedia.org/AJAX
Re[2]: Динамическая загрузка скрипта
От: M_DENIS  
Дата: 24.05.06 08:30
Оценка:
Здравствуйте, Аноним, Вы писали:

M_D>>динамическое изменение документа через innerHTML или insertAdjacentHTML

M_D>>вставляемая строка содержит скрипт

А>А если через DOM ?

А>Ссылка была гдето на http://ru.wikipedia.org/AJAX

через DOM работает

путем долгих экпериментов выяснил
если вставить в innerHTML строку, начинающуюся со скрипта, то
этот скрипт не виден потом в структуре документа
переставил скрипт ниже, стал виден в структуре документа

ну а дальше через DOM можно делать что угодно
единственное, скрипт имеет атрибут defer и чтобы, например, заменились ранее определенные функции,
нужно его инициализировать заново

                    var pageBodyScript = document.getElementById( "pageBodyScript" );
                    var parentElem = pageBodyScript.parentNode;
                    var newElem = document.createElement( "script" );
                    newElem.id = "pageBodyScript";
                    newElem.text = pageBodyScript.text;
                    newElem.type = pageBodyScript.type;
                    newElem.language = pageBodyScript.language;
                    parentElem.removeChild( pageBodyScript );
                    parentElem.appendChild( newElem );


другого метода не нашел
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.