Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Вставка скрипта с помощью innerHTML (https://javascript.ru/forum/dom-window/6732-vstavka-skripta-s-pomoshhyu-innerhtml.html)

Anguis 18.12.2009 15:39

Вставка скрипта с помощью innerHTML
 
Доброго времени суток!
Обратил внимание что если с помощью innerHTML вставить скрипт в страницу, то скрипт не сработает.
Те такой код:
<div id="n5"></div>
<script type="text/javascript">
str = '<script type="text/javascript">';
str += 'alert("true");';
str += '</script>';
n5.innerHTML = str;
</script>


Работать не будет.
Т.е. скрипт в див он вставит, но сам скрипт не сработает.
Есть ли возможность заставить работать вставляемые скрипты с помошью innerHTML ?

Kolyaj 18.12.2009 15:41

Для этого есть eval в крайнем случае.

Anguis 18.12.2009 15:46

Эм.. а подробней?

Anguis 18.12.2009 15:47

Т.е. как с помошью innerHTML и eval это все заставить работать?

PeaceCoder 18.12.2009 15:53

eval("alert(\"true \\ \\ \")");
При eval будут проблема с кавычками и \. их надо экранировать.

Anguis 18.12.2009 15:58

Цитата:

Сообщение от PeaceCoder (Сообщение 38363)
eval("alert(\"true \\ \\ \")");
При eval будут проблема с кавычками и \. их надо экранировать.

Т.е. вы хотите сказать что такой код сработает?

<div id="n5"></div>
<script type="text/javascript">
str = '<script type="text/javascript">';
str += 'eval("alert(\"true \\ \\ \")");';
str += '</script>';
n5.innerHTML = str;
</script>


У меня не получилось его заставить заработать... ЧЯДНТ?

Anguis 18.12.2009 16:13

Я знаю, что правильно это делается с помощью document.createElement('script') и .appendChild, но я не могу не использовать innerHTML ибо в реале это обстоит так:
Есть аякс функция которая результат выполнения php вставляет в елемент при помощи innerHTML. Эта функция используется в разных ситуациях с разными элементами и параметрами и изменить её я не могу. Писать еще одну подобную но без innerHTML считаю пустой тратой памяти, так как задача того не стоит, поэтому и хочу узнать есть-ли более рациональное решение?

Gvozd 18.12.2009 16:14

Цитата:

Сообщение от Anguis
Т.е. вы хотите сказать что такой код сработает?

нет разумеется
подразумевается, что вы должны взять код из тега script и скормить его ф-ции eval
также правильным решением будет динамическая генерация тега script методами DOM(createELement, и далее)
при вставке в innerHTML содержимое тега script не интепретируется никак

PeaceCoder 18.12.2009 16:22

вот такой
<div id="n5"></div>
<script type="text/javascript">
eval("alert(\"true \\ \\ \")");
</script>


А если надо вставлять теги скриптов с выполнением их надо создавать через document.createElement('script') и устанавливать свойства с применением к body или head
П.С. Незнаю почему но парсер запинается на str += '</script>';
считая это концом тега <script> в коде, хотя он находится ниже...

Kolyaj 18.12.2009 16:24

Цитата:

Сообщение от PeaceCoder
П.С. Незнаю почему но парсер запинается на str += '</script>';

Потому что парсер HTML не парсит JavaScript, а ищет закрывающий тег </script>.


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