JQuery для динамической загрузки файла Javascript
У меня есть очень большой файл javascript, который я хотел бы загрузить, только если пользователь нажимает на определенную кнопку. Я использую jQuery в качестве моей структуры. Есть встроенный метод или плагин, который поможет мне это сделать?
подробнее: У меня есть кнопка" Добавить комментарий", которая должна загрузить файл javascript TinyMCE (я сварил все материалы TinyMCE до одного JS-файла), а затем вызвать tinyMCE.инициализация.(..).
Я не хочу загружать это при начальной загрузке страницы, потому что нет все будут нажимать кнопку "Добавить комментарий".
Я понимаю, что могу просто сделать:
$("#addComment").click(function(e) { document.write("<script...") });
но есть ли лучший / инкапсулированный способ?
2 ответа:
Да, использовать getScript вместо документа.запись-это даже позволит для обратного вызова после загрузки файла.
вы можете проверить, определен ли TinyMCE, хотя, прежде чем включать его (для последующих вызовов "Добавить комментарий"), код может выглядеть примерно так:
$('#add_comment').click(function() { if(typeof TinyMCE == "undefined") { $.getScript('tinymce.js', function() { TinyMCE.init(); }); } });
предполагая, что вам нужно только позвонить
init
на него один раз, то есть. Если нет, вы можете выяснить здесь :)
Я понимаю, что я немного задержусь здесь, (5 лет), но я думаю, что есть лучший ответ, чем принято следующим образом:
$("#addComment").click(function() { if(typeof TinyMCE === "undefined") { $.ajax({ url: "tinymce.js", dataType: "script", cache: true, success: function() { TinyMCE.init(); } }); } });
The
getScript()
следующим образом:jQuery.cachedScript = function( url, options ) { // Allow user to set any option except for dataType, cache, and url options = $.extend( options || {}, { dataType: "script", cache: true, url: url }); // Use $.ajax() since it is more flexible than $.getScript // Return the jqXHR object so we can chain callbacks return jQuery.ajax( options ); }; // Usage $.cachedScript( "ajax/test.js" ).done(function( script, textStatus ) { console.log( textStatus ); });
===
или, если вы хотите отключить кэширование в мире, вы можете сделать это с помощью
ajaxSetup()
следующим образом:$.ajaxSetup({ cache: true });