Как я могу динамически выгрузить файл JavaScript? - PullRequest
27 голосов
/ 26 февраля 2009

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

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

Ответы [ 5 ]

12 голосов
/ 26 февраля 2009

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

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

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

8 голосов
/ 03 августа 2011

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

7 голосов
/ 19 сентября 2013

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

var MyJavaScriptCode = {};

MyJavaScriptCode.bla = function () {};

4 голосов
/ 10 августа 2011

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

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

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

1 голос
/ 28 января 2019

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

  1. Присвойте идентификатор целевому элементу " script " (например, " mainJs ", указывая на " main.js ")
  2. Создайте другой файл JS (например, " flush.js ") с теми же функциями и переменными в " main.js " и убедитесь, что содержимое функций и переменных пустой.
  3. После того, как " main.js " был использован, мы очищаем его, удаляя элемент " script # mainJs " и загружая " flush.js * 1023". * "динамически в дерево 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

Вот и все

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