Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   как заставить выполнить javascript-код, сгенерированный после загрузки страницы? (https://javascript.ru/forum/dom-window/25480-kak-zastavit-vypolnit-javascript-kod-sgenerirovannyjj-posle-zagruzki-stranicy.html)

alexey980 06.02.2012 19:06

как заставить выполнить javascript-код, сгенерированный после загрузки страницы?
 
есть простой html-код:
<div id="player">
   <script>....</script>
</div>
если страница статичная, то вопросов нет. по ходу загрузки страницы исполняется javascript и внутри тега <div id="player"> формируется плеер.

Но как быть, если элемент <div id="player"> добавляется на страницу динамически уже после её загрузки?

1. пробовал такой код:
var newDiv = document.createElement("div"); 
    newDiv.id = "player";
    newDiv.innerHTML = "<script>...</script>";
    document.body.appendChild(newDiv);
но он не дает нужного результата.
новый элемент <div> добавляется, но javascript внутри него не выполняется.

2. пробовал вместо <div> использовать <iframe> и затем загрузить в него javascript как новое окно:
var newiframe = document.createElement("iframe"); 
    newiframe.name = "player";
    document.body.appendChild(newiframe);
var newWindow=window.open('', 'player');
    newWindow.document.write("<script>...</script>");
тоже нифига не выходит.
в iframe ничего не отображается.

Magneto 06.02.2012 21:13

Самый простой вариант вынести скрипт во внешний файл.
<div id="player">
   <script src="ссылка на скрипт"></script>
</div>

alexey980 06.02.2012 22:12

Magneto,
этот вариант не подходит. html-страница формируется на основе внешнего XML-документа, который находится на том же сервере. код плеера (в виде javascript) также храниться в XML как текстовый узел. его нужно просто вытащить оттуда, вставить в html и каким-то образом выполнить.

Pavel M. 06.02.2012 22:54

может быть это подойдет http://api.jquery.com/jQuery.getScript/
или это http://api.jquery.com/load/
?

KingStar 10.02.2012 02:13

Вместо

newDiv.innerHTML = "<script>...</script>";

попробуй что-то тип того:

newDiv.onclick = function() {  
        
      бла...бла...бла...	
	
}


событие конечно для примера, может и с innerHTML будет тебе счастье

alexey980 13.02.2012 11:44

вот, как мне удалось разрешить поставленную задачу:
function embedplayer (playerCodeAsText) {
       document.getElementById("wrapper").innerHTML = "<iframe name='iframeplayer'></iframe>";
   var newWindow = window.open("", "iframeplayer");
       newWindow.document.write(playerCodeAsText);
}

var wrapperDiv = document.createElement("div");
    wrapperDiv.id = "wrapper";
    document.body.appendChild(wrapperDiv);

var codeAsText = "<script>" + какие-то манипуляции с содержимым кода + "</script>"

window.addEventListener("load", function () {embedplayer(codeAsTExt);}, false);

фишка была в том, чтобы повесить функцию загрузки динамически создаваемого плеера в iframe на какое-нибудь событие (в моем случае после загрузки основного окна).

Magneto 13.02.2012 14:55

Правильно иметь на странице статический плеер и ему просто передавать нужные параметры.


Часовой пояс GMT +3, время: 17:45.