Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   подгрузка js скрипта в html элемент (https://javascript.ru/forum/misc/27550-podgruzka-js-skripta-v-html-ehlement.html)

ванильный_кодер 16.04.2012 20:15

подгрузка 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 коде.

Поэтому интересуюсь есть ли более универсальный способ решения данной проблемы.

Маэстро 17.04.2012 16:08

Цитата:

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

eval(...)

P.S. к сожалению, в Google Chrome через innerHTML javascript работать будет. И я считаю это дырой в безопасности.

ванильный_кодер 19.04.2012 19:39

да. сделал жуткий костыль с 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-ов

Маэстро 19.04.2012 19:51

Не совсем понятно, какая идеология этого всего механизма, например, нельзя ли без createElement("script")?
Вот простой пример работает без ошибок:
var s1 = 'alert("111");';
var s2 = 'document.write("222")';
eval(s1 + s2);

Mixxx 19.04.2012 20:32

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


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