jQuery: как вставить или удалить файл .js во время выполнения? - PullRequest
1 голос
/ 12 января 2012

Я хочу добавить файл .js после нажатия на ссылку. Файл .js представляет собой скрипт, который не имеет функции для непосредственного вызова, но файл должен быть вставлен в основную часть сайта.

Другое решение было бы, если файл вызывается при загрузке страницы и если вызывается событие щелчка по ссылке, то удалите файл .js.

Я пробовал что-то подобное, но ничего не происходит:

$(".myLink").click(function(){
    $.getScript("myJavascriptFile.js");
});

, а также здесь:

$(".myLink").click(function(){
var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = "app_javascript/dragscroll.js";
        $(".myDiv").append(script); // or  $("body").append(script);
});

Ответы [ 2 ]

7 голосов
/ 12 января 2012

Ну, на самом деле, "ничего не происходит" звучит, скорее всего, слишком громко. getScript во всех отношениях является асинхронным, поэтому вы должны предоставить любой код, который основан на использовании этого скрипта в обработчике загрузки, который фактически является вторым параметром.

$.getScript('here_comes_the_script.js', function(){...//here comes the code})

Вы можете использовать некоторую упаковку, чтобы сделать вещи более гибкими - передавая события для загрузки обработчика, что-то вроде этого:

getScriptDetectable = function(src) {
     getScript(src, function() {
      $(document).trigger("new_script", {src: src})
     });
}

Но это, конечно, не освобождает вас от необходимости учитывать тот факт, что этот код является асинхронным.

А по поводу удаления скрипта. На самом деле нет никакого общего способа заставить браузер "не видеть" код.

Вы можете попробовать сделать что-то вроде:

var src = document.querySelector('script');
src.parentNode.removeChild(src);

но весь код в этом файле, который был оценен, уже оценен, так что в этом нет особого смысла.

0 голосов
/ 12 января 2012

Для этого есть функция jQuery - jQuery.getScript().Он добавляет тег body к телу, поэтому он делает именно то, что вы хотите.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...