繁体   English   中英

如何动态卸载 javascript 文件?

[英]How can I dynamically unload a javascript file?

我包括使用 Ajax 的页面,但我还需要包括它们各自的 javascript 文件,这需要同时从内存中删除以前的 javascript 文件。

如何卸载当前加载的 javascript 文件(以及它们在内存中的代码),以便加载新页面的文件? 它们很可能会发生冲突,因此加载了多个独立文件的 javascript 文件。

听起来确实像您需要重新评估设计。 您需要删除Ajax,或者方法名称中不需要冲突。

您可以查看以下链接: http : //www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml

其中提供了有关如何从DOM中删除JavaScript的信息。 但是,现代浏览器会将代码保留在浏览器的内存中。

不,你不能那样做。 一旦将JavaScript块加载到浏览器中并执行后,它就会存储在相应窗口范围内的浏览器内存中。 绝对没有办法卸载它(没有页面刷新/窗口关闭)。

您可以只为代码命名空间..这样可以防止冲突

var MyJavaScriptCode = {};

MyJavaScriptCode.bla = function(){};

其实那是完全可能的。 您可以替换脚本或链接元素。

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

您可以在那里学习一些技巧。

可以卸载JavaScript文件,从浏览器中清除整个代码。 这些步骤是:

  1. 给目标“ 脚本 ”元素一个ID(例如,“ 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

而已

正是我和我尝试过的类似要求,但它甚至需要来自开发人员的一小部分编码部分。

我有一个包含 20 多个函数的 js 文件,如下所示,文件名为 profile.js

function myprofile(){
//code block A
}  
function updateprofile(){
//code block B
}....
var functionsInJs=["myprofile","updateprofile",...]

现在我写了一个方法来清除这个文件的内存如下

function unloadJs(array){
    array.forEach(function(eachJsFn){
         window[eachJsFn]=undefined;//Clearing the functionality of js function in browsers window
    }
}

因此,在卸载 js 函数时,我将在其中传递函数名称数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM