У меня проблемы с этим. Сначала я попытался установить теги сценария как строки, а затем с помощью jquery replaceWith () добавить их в документ после загрузки страницы:
var a = '<script type="text/javascript">some script here</script>';
$('#someelement').replaceWith(a);
Но у меня есть ошибки строкового литерала в этой переменной. Затем я попытался кодировать строку, например:
var a = '&left;script type="text/javascript">some script here<\/script>';
но отправив это для replaceWith()
вывода только этой строки в браузер.
Может кто-нибудь, дайте мне знать, как вы будете динамически добавлять <script>
тег в браузер после загрузки страницы, в идеале через jQuery?
<script>
тег к документу?eval()
функции. Но использованиеeval()
почти всегда предполагает, что есть лучший способ сделать то, что вы пытаетесь сделать.document.write
и вы вызываете его после загрузки страницы, он уничтожит страницу.<iframe>
элементы? Вы можете отложить установку<iframe>
URL-адреса, пока не будете готовы.Ответы:
Вы можете поместить сценарий в отдельный файл, а затем использовать
$.getScript
для его загрузки и запуска.Пример:
источник
$.getScript
просто загрузит файл .js через AJAX и выполнит его. Скрипт не обязательно должен находиться в DOM, чтобы иметь доступ к div на вашей странице.$.getScript()
сценарием нужно будет находиться в одном домене или удаленный домен и браузер должны будут поддерживатьCORS
.$.ajax
примечаниях документации jQuery : «На запросы сценариев и JSONP не распространяются одни и те же ограничения политики происхождения». источник . Другими словами, вы$.getScript
можете извлекать файлы .js из других доменов, а не только из вашего собственного .Попробуйте следующее:
http://api.jquery.com/append
источник
append
чтобы добавить скрипт. Добавление вызывает немедленную оценку даже встроенного скрипта (именно то, что мне нужно). СпасибоВот правильный способ сделать это с помощью современного (2014) JQuery:
или если вы действительно хотите заменить div, вы можете сделать:
источник
Более простой способ:
Вы также можете использовать эту форму для загрузки css.
источник
</script>
в свой источник, поскольку это может вызвать проблемы с синтаксическим/
$('head').append('<script src="your.js"><\/script>');
Этот ответ технически аналогичен тому, что ответил jcoffland, или равен ему. Я просто добавил запрос, чтобы определить, присутствует ли сценарий уже или нет. Мне это нужно, потому что я работаю на веб-сайте интрасети с парой модулей, некоторые из которых совместно используют сценарии или приносят свои собственные, но эти сценарии не нужно загружать каждый раз снова. Я использую этот фрагмент уже более года в производственной среде, он отлично работает. Комментируя про себя: Да, я знаю, правильнее было бы спросить, существует ли функция ... :-)
источник
Есть одно обходное решение, которое больше похоже на взлом, и я согласен, что это не самый элегантный способ сделать это, но работает на 100%:
Скажите, что ваш ответ AJAX похож на
Обратите внимание, что я специально пропустил закрывающий тег. Затем в скрипте, загружающем вышеуказанное, сделайте следующее:
Только не спрашивайте меня, почему :-) Это одна из тех вещей, к которым я пришел в результате отчаянных почти случайных испытаний и неудач.
У меня нет полных предложений о том, как это работает, но, что интересно, это НЕ будет работать, если вы добавите закрывающий тег в одну строку.
В такие моменты я чувствую, что успешно разделил на ноль.
источник
<\/script>
будет действительным, хотяПример:
Он должен работать. Я попробовал; тот же результат. Но когда я использовал это:
Это сработало для меня.
Изменить: я забыл
#someelement
(кстати, я мог бы использовать#someElement
из-за соглашений)Самым важным здесь является + =, поэтому html добавляется, а не заменяется.
Оставьте комментарий, если не сработало. Я хочу вам помочь!
источник
Вот более понятный способ - без jQuery - который добавляет скрипт в качестве последнего дочернего элемента
<body>
:Но если вы хотите добавлять и загружать скрипты, используйте метод Rocket Hazmat .
источник
Если вы пытаетесь запустить динамически сгенерированный JavaScript, вам будет немного лучше, используя
eval
. Однако JavaScript - настолько динамичный язык, что в нем действительно не должно быть необходимости.Если скрипт статический, то
getScript
-предложение Rocket - правильный выбор.источник