2015-10-06 2 views
0

Я пытаюсь добавить скрипт в главный тег моей страницы. Я вижу код, который я пытаюсь добавить в тег body, но он не отображается в главном теге.Динамически добавлять JS-код в заголовок

$(document).load(function() { 
    $('<script>console.log("hi");</' + 'script>').appendTo("head") 
}); 

Я вижу это добавляется в <body>, но я не вижу его в <head>.

Я пробовал варианты функций appendTo и document.ready и document.load. Ни один из тех, кто работал до сих пор.

Я отправился через cpuple из похожих потоков, прежде чем отправил. Я, похоже, не исправить мой вопрос

+0

http://stackoverflow.com/a/13388018/894111 – Omidam81

+0

если скрипт работает, что разница, где она заканчивается так или иначе? Какова проблема более высокого уровня? – charlietfl

+0

По какой-то причине Google Analytics я хочу, чтобы этот скрипт был добавлен в заголовок – user3861559

ответ

0

Одна вещь, вы, возможно, потребуется сделать, это спасаясь от </, как <\/

Если ее встроенный сценарий, хотя, может быть, вы можете попробовать просто добавить SetTimeout к нему.

0

Попробуйте следующую функцию:

(function (src) { 
    var tagName = 'script', script = document.createElement(tagName); 
    script.src = src; 
    var elm = document.getElementsByTagName(tagName)[0]; 
    elm.parentNode.insertBefore(script, elm); 
})('SCRIPT.SRC.HERE.js'); 

Это создаст динамический script тег и добавить его перед первым script тега. Хотя это не будет работать так, как вы хотите, если у вас нет script тегов внутри вашего head. В этом случае, вы можете использовать следующую функцию:

(function (src) { 
    var tagName = 'script', script = document.createElement(tagName); 
    script.src = src; 
    var head = document.getElementsByTagName('head')[0]; 
    head.insertBefore(script, head.childNodes[0]); 
})('SCRIPT.SRC.HERE.js'); 

Это будет непосредственно получить первый элемент внутри тега head и добавьте новый скрипт перед ним.

+0

Ваш код работает. Вы также можете использовать 'document.head.appendChild (script);' –

0

document не запускает событие «load», или, если это так, это событие с пузырьками из-за чего-то другого (например, другого скрипта или файла изображения). Попробуйте изменить document к window:

http://jsfiddle.net/5bhmwyrx/3/

$(window).load(function() { 
    var script = $('<script>console.log("hi");</' + 'script>').appendTo(document.head); 
    console.log("Script was appended to", script[0].parentNode.nodeName); 
    //-> Script was appended to HEAD 
}); 

$(document).load(function() { 
    console.log("You should never see this"); 
}); 

document.onload = function() { 
    console.log("You should not see this in modern browsers"); 
}; 
+0

Спасибо, но все же я не вижу его в главном теге – user3861559

+0

, если вы посмотрите на это, он запускает событие onload, подобное окну (см. Http: // stackoverflow.com/a/588048/3769412), но это помогает OP использовать jQuery, чтобы справиться с этим, так или иначе, что сглаживало бы что угодно и не отвечало на вопрос, который ОП задал в любом случае – Daemedeor

+0

@Daemedeor - 'document.onload = function() {console.log ("событие onload документа"); }; 'ничего не записывает (в текущих браузерах). Это настолько старый, что он еще не реализован в браузерах и был JS api для '' - супер супер старой школы. –

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