Как я могу динамически выгружать файл javascript?

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

Как я могу выгрузить загруженные в данный момент файлы javascript (а также их код в памяти), чтобы загрузить файлы новой страницы? Они, скорее всего, будут конфликтовать, поэтому загружаются файлы javascript из нескольких независимых файлов.

Ответов (5)

вы можете просто пространство имен вашего кода .. таким образом вы предотвратите столкновения

var MyJavaScriptCode = {};

MyJavaScriptCode.bla = function () {};

Можно выгрузить файл javaScript, очистив весь код из браузера. Шаги следующие:

  1. Дайте идентификатор целевому элементу « скрипта » (например, « mainJs », указывающий на « main.js »).
  2. Создайте другой файл JS (например, « flush.js ») с теми же функциями и переменными в « main.js » и убедитесь, что содержимое функций и переменных пусто.
  3. После того, как « main.js » израсходован, мы очищаем его, удаляя элемент « script # mainJs » и динамически загружая « flush.js » в дерево DOM.

Пример

mainJs    = document.getElementById("mainJs");
document.head.removeChild(mainJS);//Remooves main.js from the DOM tree

flushFile = document.createElement("script");
flushFile.setAttribute("src", "flush.js");
document.head.appendChild(flushFile);//Loads flush.js into the DOM tree, overwriting all functions and variables of main.js in browser memory to null

Вот и все

Это действительно звучит так, будто вам нужно пересмотреть свой дизайн. Либо вам нужно отказаться от ajax, либо вам не нужно иметь коллизий в именах ваших методов.

Вы можете просмотреть эту ссылку: http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml

Это дает информацию о том, как удалить javascript из DOM. Однако современные браузеры оставляют код в памяти браузера.

Нет, ты не можешь этого сделать. Как только блок JavaScript загружается в браузер и выполняется, он сохраняется в памяти браузера в рамках соответствующего окна. Выгрузить его нет абсолютно никакой возможности (без обновления страницы / закрытия окна).

На самом деле это вполне возможно. Вы можете заменить скрипт или элемент ссылки.

function createjscssfile(filename, filetype){
if (filetype=="js"){ //if filename is a external JavaScript file
  var fileref=document.createElement('script')
  fileref.setAttribute("type","text/javascript")
  fileref.setAttribute("src", filename)
}

else if (filetype=="css"){ //if filename is an external CSS file
  var fileref=document.createElement("link")
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", filename)
}
  return fileref
}

function replacejscssfile(oldfilename, newfilename, filetype){
var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none" //determine element type to create nodelist using
var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none" //determine corresponding attribute to test for
var allsuspects=document.getElementsByTagName(targetelement)
for (var i=allsuspects.length; i>=0; i--){ //search backwards within nodelist for matching elements to remove
    if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(oldfilename)!=-1){
        var newelement=createjscssfile(newfilename, filetype)
        allsuspects[i].parentNode.replaceChild(newelement, allsuspects[i])
    }
  }
}

вы должны заполнить параметры имени файла как атрибут src и тип файла как "js" или "css"

Я думаю, что код объяснять не нужно. Также вы писали в 2009 году, но эй. Может кому будет это нужно правильно? :)

Все кредиты принадлежат: http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml

Кстати, там можно научиться некоторым трюкам.