【问题标题】:Dynamically adding an external JavaScript or CSS file in java web application在 Java Web 应用程序中动态添加外部 JavaScript 或 CSS 文件
【发布时间】:2011-05-07 18:21:59
【问题描述】:

我想在我的 test.html 中动态添加一个外部 JavaScript 或 CSS 文件。 我知道这个技巧:

 $(”).appendTo(‘head’).attr({

 rel: ‘stylesheet’,

 type: ‘text/css’,

 href: ‘**htttp://192.168.30.229:8080/**javascripts/jwysiwyg/jquery.wysiwyg.css’

});

我想将 css 和 javascript 的 url(http://192.168.30.229:8080/) 保存在 xml 文件(例如 web.xml)中,并从 web.xml 文件中读取 url并将其附加到 href 因此如果 URL 必须更改,例如 **:http://192.168.100.229:7071/ html中的代码无需更改。

我应该如何在 xml 文件中写入/读取该 url 并在 test.html 中使用它?

【问题讨论】:

    标签: java javascript jquery css


    【解决方案1】:
    1. 您可以在 html 页面中使用 javascript 来加载外部 javascript 或 css:http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml

    2. 您需要动态生成 html 以更改其中的一部分。您可以为此使用 JSP。在你的 web.xml 中定义<context-param,然后在 JSP 页面中引用它:

      <context-param>
        <param-name>someUrl</param-name>
        <param-value>http://192.168.1.1:8080/something</param-value>
      </context-param>
      

    然后在JSP中引用它:

    <%= getServletContext().getInitParamter("someUrl") %>  
    

    【讨论】:

      【解决方案2】:
      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
      

      该函数首先从页面上的所有“SCRIPT”或“LINK”元素创建一个集合,具体取决于要删除的所需文件类型。要查看的相应属性也会相应更改(“src”或“href”属性)。然后,该函数开始向后循环收集的元素,以查看其中是否有任何与应删除的文件的名称匹配。反转方向是有原因的-如果/每当删除已识别的元素时,集合每次都会折叠一个元素,并继续正确循环通过新集合,反转方向就可以了(它可能会遇到未定义的元素,因此首先检查 if 语句中的 allsuspects[i])。现在,为了删除已识别的元素,在其上调用 DOM 方法 parentNode.removeChild()

      【讨论】: