подгрузка 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, время: 02:35. |