powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / (JavaScript) Почему в FF не исполняется клонированный тэг script?
5 сообщений из 5, страница 1 из 1
(JavaScript) Почему в FF не исполняется клонированный тэг script?
    #36323915
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ниже наглядный пример, который через метод replaceChild инициирует запуск вставленных в DOM скриптов. Только в первом случае подготовка делается через createElement, во втором через cloneNode. Мне лично больше нравиться второй вариант, который и компактнее и правильнее т.к. позволяет копировать всевозможные атрибуты. Но почему второй вариант не нравиться мозилле я не понимаю.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Внедренный JavaScript</title>
<script type="text/javascript">
function ggg(k) {
    var to = document.getElementById("bbb");
    to.innerHTML = 'Some text<br/><script id="fedora-banner" type="text/javascript" \
	src="http://fedoraproject.org/static/js/release-counter-ext.js?lang=ru"><\/script>';
 
    //Исполнение внедренных JavaScript скриптов
    var scripts = to.getElementsByTagName("script");
    var script;
    for (var i =  0 ; script = scripts[i]; i++)
    switch (k) {
    case  1 :
        //Везде работает
        var newScript = document.createElement('script');
        newScript.type="text/javascript";
        if (script.id) newScript.id = script.id;
        if (script.src) newScript.src = script.src;
        if (script.text) newScript.text = script.text;
        script.parentNode.replaceChild(newScript, script);
        break;
    case  2 :
        //В Mozilla FF не работает (в IE, Opera, Chrome - работает)
        var newScript = script.cloneNode(true);
        script.parentNode.replaceChild(newScript, script);
        break;
    }
}
</script>
</head>
<body>  
<input type="button" value="exec v1" onclick="ggg(1)" />
<input type="button" value="exec v2" onclick="ggg(2)" />
<div id="bbb" />
</body>
</html>
...
Рейтинг: 0 / 0
(JavaScript) Почему в FF не исполняется клонированный тэг script?
    #36324073
------------209384
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Твое решение использует тн "побочный эффект". Мозилка работает правильно. Но кто сказал что скрипт должен выполняться. У разных браузеров это происходит по-разному. Скрипт выполняется при изменении свойства src или при добавлении скрипта к дереву документа.

А почему ты считаешь что действуешь "правильно"?
...
Рейтинг: 0 / 0
(JavaScript) Почему в FF не исполняется клонированный тэг script?
    #36324200
NT Man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
------------209384Скрипт выполняется при изменении свойства src или при добавлении скрипта к дереву документа.
А чем replaceChild не добавление скрипта к дереву? Тем более в варианте №1 тот-же replaceChild прокатывает везде.

------------209384А почему ты считаешь что действуешь "правильно"?
Вообще изначально было так
Код: plaintext
1.
2.
3.
4.
5.
var newScript = document.createElement('script');
newScript.type="text/javascript";
if (script.src) newScript.src = script.src;
if (script.text) newScript.text = script.text;
script.parentNode.replaceChild(newScript, script);
Потом я обнаружил что вставка кода
Код: plaintext
1.
<script id="fedora-banner" type="text/javascript" \
src="http://fedoraproject.org/static/js/release-counter-ext.js?lang=ru"><\/script>'
не отрабатывает, полез разбираться оказалось что код завязан на на id, быстренько добавил заполнение атрибута id и все заработало. Потом подумал, а ведь могут когда нибудь завязаться на какой нибудь другой атрибут (возможно вообще отсутствующим в текущей спецификации) и поэтому лучше не создавать новый тэг и копировать известные атрибуты, а лучше его клонировать и не задумываться о нужных атрибутах вообще. Попробовал и оказалось, что в лисе не все так-то просто.
...
Рейтинг: 0 / 0
(JavaScript) Почему в FF не исполняется клонированный тэг script?
    #36324214
Логика понятна. Решения такие
1) или клонируя присваивай заново src - некоторые запускают скрипт именно в этот момент.
2) или создавай новый элемент скрипт, перебирая атрибуты for in.
3) возможно придется вместо replace делать append

Что-то я сам пытался экономить память на элементах скрипт и даже повторно их использовать, но увы некоторые браузеры стреляют скрипт один раз (видимо защита от повторного выполнения скриптов при различных комбинациях действий программиста)
...
Рейтинг: 0 / 0
(JavaScript) Почему в FF не исполняется клонированный тэг script?
    #36324215
By the way.
Возможно требуется изменение адреса, например путем добавления рандомного параметра запроса
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / (JavaScript) Почему в FF не исполняется клонированный тэг script?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]