Javascript.RU

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

подгрузка js скрипта в html элемент
итак суть вопроса
имеется следующий код:

<div id="BLOCK_ID"></div>

<script type="text/javascript"> document.write('<script language="javascript" type="text/javascript" charset="utf-8" src="http://domain.com"> </script>'); </script>


тут всё просто. js обращается к серверу и тот ему отдаёт с помощью такой конструкции обычный html код.

echo "
	document.getElementById('BLOCK_ID).innerHTML = 'HTML_CODE';
	";


Теперь появилась задача в некоторых случаях отдавать некоторый(заранее не знаем) js код. понятное дело, что через innerHTML js работать не будет. Надо использовать к примеру document.createElement('script'); и appendChild.

Но проблема в том, что я не знаю что именно у меня будет в js коде.

Поэтому интересуюсь есть ли более универсальный способ решения данной проблемы.
Ответить с цитированием
  #2 (permalink)  
Старый 17.04.2012, 16:08
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от ванильный_кодер Посмотреть сообщение
понятное дело, что через innerHTML js работать не будет.
eval(...)

P.S. к сожалению, в Google Chrome через innerHTML javascript работать будет. И я считаю это дырой в безопасности.
Ответить с цитированием
  #3 (permalink)  
Старый 19.04.2012, 19:39
Новичок на форуме
Отправить личное сообщение для ванильный_кодер Посмотреть профиль Найти все сообщения от ванильный_кодер
 
Регистрация: 16.04.2012
Сообщений: 2

да. сделал жуткий костыль с eval-ом

$str2 = addslashes(' var extrajs = document.createElement("script");extrajs.src = "'.$src.'";extrajs.type = "text/javascript";extrajs.language = "javascript";var head = document.getElementById("'.$id_block.'");head.appendChild(extrajs);');
					
$str ='eval("'.$str2.'");';

echo $str;


в результате всё работало как и надо во всех браузерах, даже в IE!

Пока в сорцах определенного js кода не встретилась конструкция с
document.write()


В результате работать js стал только в опере. а фаерфокс например в консоле ошибок выдавал

Предупреждение: Вызов document.write() из асинхронно-загруженного внешнего сценария был проигнорирован.

Отсюда вопрос это проблема в содержимом document.write() ? или это из за всех этих многократных подгрузок js кода и eval-ов
Ответить с цитированием
  #4 (permalink)  
Старый 19.04.2012, 19:51
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Не совсем понятно, какая идеология этого всего механизма, например, нельзя ли без createElement("script")?
Вот простой пример работает без ошибок:
var s1 = 'alert("111");';
var s2 = 'document.write("222")';
eval(s1 + s2);
Ответить с цитированием
  #5 (permalink)  
Старый 19.04.2012, 20:32
Интересующийся
Отправить личное сообщение для Mixxx Посмотреть профиль Найти все сообщения от Mixxx
 
Регистрация: 11.04.2012
Сообщений: 20

document.write()
нельзя вызывать после загрузки страницы
Его разрешено юзать только до её полной загрузки.
подрбнее читайте тут http://alljs.ru/articles/document-write
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается вставить код js в HTML garmoni Элементы интерфейса 3 05.09.2013 05:56
Повседневная роль JS и html function Общие вопросы Javascript 6 25.01.2012 09:41
Создание с помощью скрипта html элемента Anastasiya Общие вопросы Javascript 4 25.10.2011 22:28
Вывод JS значения в одну строку в HTML velo Общие вопросы Javascript 7 15.12.2009 03:57
Html метки + div + JS boltayka Events/DOM/Window 1 07.09.2009 17:21