Ответ 1
Вы можете поместить файл script в отдельный файл, а затем $.getScript
использовать его для загрузки и запуска.
Пример:
$.getScript("test.js", function(){
alert("Running test.js");
});
У меня проблемы с работой. Сначала я попытался установить теги script как строки, а затем с помощью jquery replaceWith() добавить их в документ после загрузки страницы:
var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);
Но я получил строковые литералы на этом var. Затем я попытался кодировать строку как:
var a = '&left;script type="text/javascript">some script here<\/script>';
но отправка этого значения в replaceWith()
выводит только эту строку в браузер.
Может кто-нибудь, пожалуйста, сообщите мне, как бы вы динамически добавляли тег <script>
в браузер после загрузки страницы, в идеале через jQuery?
Вы можете поместить файл script в отдельный файл, а затем $.getScript
использовать его для загрузки и запуска.
Пример:
$.getScript("test.js", function(){
alert("Running test.js");
});
Попробуйте следующее:
<script type="text/javascript">
// Use any event to append the code
$(document).ready(function()
{
var s = document.createElement("script");
s.type = "text/javascript";
s.src = "http://scriptlocation/das.js";
// Use any selector
$("head").append(s);
});
Здесь правильный способ сделать это с помощью современного (2014) JQuery:
$(function () {
$('<script>')
.attr('type', 'text/javascript')
.text('some script here')
.appendTo('head');
})
или если вы действительно хотите заменить div, который вы могли бы сделать:
$(function () {
$('<script>')
.attr('type', 'text/javascript')
.text('some script here')
.replaceAll('#someelement');
});
Простейший способ:
$('head').append('<script type="text/javascript" src="your.js"></script>');
Вы также можете использовать эту форму для загрузки css.
Этот ответ технически подобен или равен тому, что ответил jcoffland. Я просто добавил запрос, чтобы определить, присутствует ли script или нет. Мне нужно это, потому что я работаю на веб-сайте интрасети с несколькими модулями, некоторые из которых используют сценарии или приносят свои собственные, но эти сценарии не нужно загружать каждый раз снова. Я использую этот фрагмент с более чем года в производственной среде, он работает как charme. Комментируя про себя: Да, я знаю, было бы правильнее спросить, существует ли функция...: -)
if (!$('head > script[src="js/jquery.searchable.min.js"]').length) {
$('head').append($('<script />').attr('src','js/jquery.searchable.min.js'));
}
Пример:
var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);
Он должен работать. Я попробовал; такой же результат. Но когда я использовал это:
var length = 1;
var html = "";
for (var i = 0; i < length; i++) {
html += '<div id="codeSnippet"></div>';
html += '<script type="text/javascript">';
html += 'your script here';
html += '</script>';
}
$('#someElement').replaceWith(a);
Это сработало для меня.
Изменить: я забыл #someelement
(кстати, я мог бы использовать #someelement
из-за условностей)
Самое главное здесь - + = поэтому html добавляется и не заменяется.
Оставить комментарий, если он не работает. Я хотел бы помочь вам!
Существует одно обходное решение, которое звучит скорее как хак, и я согласен, что это не самый элегантный способ сделать это, но работает на 100%:
Скажите, что ваш ответ AJAX похож на
<b>some html</b>
<script>alert("and some javscript")
Обратите внимание, что я специально пропустил закрывающий тег. Затем в script, который загружает указанное выше, выполните следующие действия:
$.ajax({
url: "path/to/return/the-above-js+html.php",
success: function(newhtml){
newhtml += "<";
newhtml += "/script>";
$("head").append(newhtml);
}
});
Просто не спрашивайте меня, почему:-) Это одна из тех вещей, которые я пришел в результате отчаянных почти случайных испытаний и терпит неудачу.
У меня нет полных предложений о том, как это работает, но, что интересно, оно НЕ будет работать, если вы добавите закрывающий тег в одну строку.
Во времена, подобные этим, я чувствую, что успешно делю на нуль.
Вот более понятный способ: нет необходимости в jQuery — который добавляет script в качестве последнего дочернего элемента <body>
:
document.body.innerHTML +='<script src="mycdn.js"><\/script>'
Но если вы хотите добавить и загрузить скрипты, используйте Rocket Hazmat method.
Если вы пытаетесь запустить некоторый динамически сгенерированный JavaScript, вам будет немного лучше, используя eval
. Однако JavaScript - такой динамический язык, который вам действительно не нужен.
Если script является статическим, то Rocket getScript
-suggestion - это путь.