У меня есть очень большой файл JavaScript, который я хотел бы загрузить, только если пользователь нажимает на определенную кнопку. Я использую JQuery в качестве моей основы. Есть ли встроенный метод или плагин, который поможет мне сделать это?
Немного подробнее: у меня есть кнопка «Добавить комментарий», которая должна загрузить файл JavaScript TinyMCE (я свел все материалы TinyMCE к одному файлу JS), а затем вызвать tinyMCE.init (...).
Я не хочу загружать это при начальной загрузке страницы, потому что не все будут нажимать «Добавить комментарий».
Я понимаю, я могу просто сделать:
$("#addComment").click(function(e) { document.write("<script...") });
но есть ли лучший / инкапсулированный способ?
javascript
jquery
jquery-plugins
tinymce
lazy-loading
Джефф Фрикадельки Ян
источник
источник
Ответы:
Да, используйте getScript вместо document.write - он даже разрешит обратный вызов после загрузки файла.
Возможно, вы захотите проверить, определен ли TinyMCE, прежде чем включать его (для последующих вызовов «Добавить комментарий»), чтобы код мог выглядеть примерно так:
Предполагая, что вам нужно позвонить
init
только один раз, то есть. Если нет, вы можете понять это отсюда :)источник
Я понимаю, что немного опаздываю (5 лет или около того), но думаю, что есть лучший ответ, чем принятый ниже:
getScript()
Функция фактически предотвращает кэширование в браузере . Если вы запустите трассировку, вы увидите, что скрипт загружен с URL-адресом, который включает параметр timestamp:Если пользователь щелкает
#addComment
ссылку несколько раз,tinymce.js
он будет перезагружен с другого URL-адреса с временными метками. Это побеждает цель кэширования браузера.===
Кроме того, в
getScript()
документации есть пример кода, который демонстрирует, как включить кэширование, создавая пользовательскуюcachedScript()
функцию следующим образом:===
Или, если вы хотите отключить кэширование глобально, вы можете сделать это
ajaxSetup()
следующим образом:источник
$.getScript({url: "test.js",cache:true})