【问题标题】:Load and unload javascript at runtime [duplicate]在运行时加载和卸载 javascript [重复]
【发布时间】:2014-09-04 15:55:43
【问题描述】:

是否可以在运行时通过 JavaScript 添加或删除 JavaScript 文件和 CSS 文件?如果 JavaScript 无法实现,我们可以通过 PHP 或任何其他服务器站点语言来实现吗?

实际上我尝试了 yep-nope js,但我无法通过它卸载任何 javascript。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    检查thisthisthis

    从上面的链接,动态添加js或者css:

    function loadjscssfile(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)
     }
     if (typeof fileref!="undefined")
      document.getElementsByTagName("head")[0].appendChild(fileref)
    }
    
    loadjscssfile("myscript.js", "js") //dynamically load and add this .js file
    loadjscssfile("javascript.php", "js") //dynamically load "javascript.php" as a JavaScript file
    loadjscssfile("mystyle.css", "css") ////dynamically load and add this .css file
    

    另外,动态移除 js 或 css:

    function removejscssfile(filename, filetype){
     var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none" //determine element type to create nodelist from
     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(filename)!=-1)
       allsuspects[i].parentNode.removeChild(allsuspects[i]) //remove element by calling parentNode.removeChild()
     }
    }    
    removejscssfile("somescript.js", "js") //remove all occurences of "somescript.js" on page
    removejscssfile("somestyle.css", "css") //remove all occurences "somestyle.css" on page
    

    但请注意删除:

    那么当您删除外部 JavaScript 或 CSS 文件时,实际会发生什么?也许并不完全是你所期望的。在里面 JavaScript 的情况,而元素从文档中删除 树,作为外部 JavaScript 文件的一部分加载的任何代码都将保留 在浏览器的内存中。也就是说,你仍然可以访问 外部文件首次添加时添加的变量、函数等 已加载

    【讨论】:

    • 谢谢 Mikey 实际上我用 jQuery 做了同样的事情,它工作正常,但我在 firebug 中检查它没有显示脚本标签,这就是我感到困惑的原因。但它的功能按预期工作:) 再次感谢
    【解决方案2】:

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

    您最多可以将 javascript 文件中包含的变量设置为 Null。但同样,这并不能完全消除问题,但是是的,对这些变量的任何进一步访问都不会产生结果。

    【讨论】:

      【解决方案3】:

      是否可以在运行时通过 JavaScript 添加或删除 JavaScript 文件和 CSS 文件?

      您可以动态加载 JavaScript,但是一旦加载,您就无法在活动页面中卸载 JavaScript。您可以重新加载页面,这将清除活动脚本并重新开始。或者,您可以覆盖已设置的功能。

      就 CSS 而言,您可以添加/删除 <link.../> 元素来添加/删除样式表。此外,您可以添加/删除可能包含规则的 <style> 元素。

      您还可以使用 DHTML 修改页面内元素的任何内联样式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-20
        • 2013-03-28
        • 2016-08-18
        • 2013-06-26
        • 2015-02-22
        相关资源
        最近更新 更多