Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.12.2009, 15:39
Интересующийся
Отправить личное сообщение для Anguis Посмотреть профиль Найти все сообщения от Anguis
 
Регистрация: 16.12.2009
Сообщений: 17

Вставка скрипта с помощью 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 ?
Ответить с цитированием
  #2 (permalink)  
Старый 18.12.2009, 15:41
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Для этого есть eval в крайнем случае.
Ответить с цитированием
  #3 (permalink)  
Старый 18.12.2009, 15:46
Интересующийся
Отправить личное сообщение для Anguis Посмотреть профиль Найти все сообщения от Anguis
 
Регистрация: 16.12.2009
Сообщений: 17

Эм.. а подробней?
Ответить с цитированием
  #4 (permalink)  
Старый 18.12.2009, 15:47
Интересующийся
Отправить личное сообщение для Anguis Посмотреть профиль Найти все сообщения от Anguis
 
Регистрация: 16.12.2009
Сообщений: 17

Т.е. как с помошью innerHTML и eval это все заставить работать?
Ответить с цитированием
  #5 (permalink)  
Старый 18.12.2009, 15:53
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

eval("alert(\"true \\ \\ \")");
При eval будут проблема с кавычками и \. их надо экранировать.
Ответить с цитированием
  #6 (permalink)  
Старый 18.12.2009, 15:58
Интересующийся
Отправить личное сообщение для Anguis Посмотреть профиль Найти все сообщения от Anguis
 
Регистрация: 16.12.2009
Сообщений: 17

Сообщение от PeaceCoder Посмотреть сообщение
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>


У меня не получилось его заставить заработать... ЧЯДНТ?
Ответить с цитированием
  #7 (permalink)  
Старый 18.12.2009, 16:13
Интересующийся
Отправить личное сообщение для Anguis Посмотреть профиль Найти все сообщения от Anguis
 
Регистрация: 16.12.2009
Сообщений: 17

Я знаю, что правильно это делается с помощью document.createElement('script') и .appendChild, но я не могу не использовать innerHTML ибо в реале это обстоит так:
Есть аякс функция которая результат выполнения php вставляет в елемент при помощи innerHTML. Эта функция используется в разных ситуациях с разными элементами и параметрами и изменить её я не могу. Писать еще одну подобную но без innerHTML считаю пустой тратой памяти, так как задача того не стоит, поэтому и хочу узнать есть-ли более рациональное решение?
Ответить с цитированием
  #8 (permalink)  
Старый 18.12.2009, 16:14
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,234

Сообщение от Anguis
Т.е. вы хотите сказать что такой код сработает?
нет разумеется
подразумевается, что вы должны взять код из тега script и скормить его ф-ции eval
также правильным решением будет динамическая генерация тега script методами DOM(createELement, и далее)
при вставке в innerHTML содержимое тега script не интепретируется никак
Ответить с цитированием
  #9 (permalink)  
Старый 18.12.2009, 16:22
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

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


А если надо вставлять теги скриптов с выполнением их надо создавать через document.createElement('script') и устанавливать свойства с применением к body или head
П.С. Незнаю почему но парсер запинается на str += '</script>';
считая это концом тега <script> в коде, хотя он находится ниже...
Ответить с цитированием
  #10 (permalink)  
Старый 18.12.2009, 16:24
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от PeaceCoder
П.С. Незнаю почему но парсер запинается на str += '</script>';
Потому что парсер HTML не парсит JavaScript, а ищет закрывающий тег </script>.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Круговорт скрипта.... Karl Общие вопросы Javascript 1 17.10.2009 15:37
Вставка скрипта в HTML страницу dorn Общие вопросы Javascript 5 14.10.2009 07:39
innerHTML and z-index ViZ0R Общие вопросы Javascript 5 12.08.2009 10:28
Блок переключения меню на JS, два скрипта в одном файле Dizeloid Элементы интерфейса 0 30.07.2009 12:03
ошибка с innerHTML Gekt0r Общие вопросы Javascript 15 21.08.2008 11:57