подгрузка 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 коде. Поэтому интересуюсь есть ли более универсальный способ решения данной проблемы. |
Цитата:
eval(...) P.S. к сожалению, в Google Chrome через innerHTML javascript работать будет. И я считаю это дырой в безопасности. |
да. сделал жуткий костыль с 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-ов |
Не совсем понятно, какая идеология этого всего механизма, например, нельзя ли без createElement("script")?
Вот простой пример работает без ошибок:
var s1 = 'alert("111");';
var s2 = 'document.write("222")';
eval(s1 + s2);
|
document.write()нельзя вызывать после загрузки страницы Его разрешено юзать только до её полной загрузки. подрбнее читайте тут http://alljs.ru/articles/document-write |
| Часовой пояс GMT +3, время: 06:56. |