2013-08-17 3 views
2

У меня есть этот код, который сводит меня с ума.javascript document.write загружен, но не выполнен

parent.document.write("<script type='application/javascript' scr='http://backlinker.nl/ip.php?callback=getip'><\/script>"); 

это работает и добавляет к головной части HTML документа:

<script type='application/javascript' scr='http://backlinker.nl/ip.php?callback=getip'></script> 

Но это не выполняется. Разница заключается в том, когда я вставить его прямо в голову HTML-документа без parent.document.write он работает и выполняет:

<script type='application/javascript' scr='http://backlinker.nl/ip.php?callback=getip'></script> 

дает выход в Firebug исходный код:

<script src="http://backlinker.nl/ip.php?callback=getip" type="application/javascript"> 
getip({"ip": "195.241.100.221"}); 
</script> 

при загрузке корыта parent.document.write функции НЕТ IP выход:

<script src="http://backlinker.nl/ip.php?callback=getip" type="application/javascript"> 
</script> 

Любой знает, почему функция parent.document.write работает (она ставит т он код в голову html раздел), но не загружает ip?!

Хорошо, ребята, у нас есть альтернатива, которая работает, но все же не отвечает на вопрос, который сводит меня с ума, почему мой не работает?!

Обходной =

var scriptElement = document.createElement("script"); 
scriptElement.src = 'http://backlinker.nl/ip.php?callback=getip'; 
scriptElement.type = "text/javascript"; //specify type so that the browser won't ignore it 
var head = document.getElementsByTagName("head")[0] || document.documentElement; 

head.appendChild (scriptElement);

+1

У вас есть опечатка; 'scr'instead' src'. Это означает, что ваш ресурс не загружается. –

ответ

2

Try:

var scriptElement = document.createElement("script"); 
scriptElement.src = 'http://backlinker.nl/ip.php?callback=getip'; 
scriptElement.type = "text/javascript"; //specify type so that the browser won't ignore it 
var head = document.getElementsByTagName("head")[0] || document.documentElement; 
head.appendChild(scriptElement); 
+0

Хорошо, отлично! Но это все еще сводит меня с ума. Почему моя функция вставляет скрипт, но не выполняется. Ваша вставка + работа! –

+0

@ dr3: браузеры будут игнорировать тип, который он не понимает. Использование 'application/javascript' может привести к игнорированию сценария в некоторых старых браузерах (хотя он вставлен). В этом ответе вместо этого используется текст/javascript. –

+0

Спасибо. Итак, если бы я изменил приложение на текст в моем коде orignal с parent.document.write, это сработает? –

1

Если вы хотите создать элемент сценария, загрузите его и выполнить - попробуйте document.createElement вместо:

var scriptElement = document.createElement("script"); 
scriptElement.src = 'http://backlinker.nl/ip.php?callback=getip'; 
document.body.appendChild(scriptElement); 
+0

И вы можете найти описание и объяснение такого поведения document.write здесь: http://stackoverflow.com/questions/236073/why-split-the-script-tag-when -writing-it-with-document-write – yname

+0

Спасибо, но я попробовал, и он ничего не делает. Он не добавляет тег скрипта в код html. –

+0

Я попытался приспособиться к, но все равно не работает. это сводит меня с ума. –

Смежные вопросы