Динамическая вставка текста сценария является единственной альтернативой eval
.
var head = document.getElementsByTagName('head')[0] || document.documentElement,
nscr = document.createElement('script');
nscr.type = 'text/javascript';
nscr.textContent = o.responseText;
nscr.setAttribute('name', 'dynamically inserted');
nscr.onload = nscr.onreadystatechange = function() {
if( nscr.readyState ) {
if( nscr.readyState === 'complete' || scr.readyState === 'loaded' ) {
nscr.onreadystatechange = null;
doSomethingWithCode();
}
else {
doSomethingWithCode();
}
};
head.insertBefore(nscr, head.firstChild);
Единственное, что стоит упомянуть: textContent
недоступно в InternetExplorers. Вместо этого вам нужно будет использовать .text
, поэтому небольшое обнаружение делает его кросс-браузерным.
1010 * редактировать *
Чтобы иметь динамический тег сценария загрузки syncronous
, вы можете добавить nscr.async = true;
. В любом случае, это работает только в самых современных браузерах.