2010-03-20 2 views
1

я хочу импортировать данный CSS или файла JavaScript в зависимости ОС некоторые условия, в моем Servlet у меня есть:Как динамически импортировать JavaScript и CSS файлы

 

protected void doPost(...) 
{ 
    if(condition) 
    { 
    //import some javascript or css file here 
    } 

} 
 

Мне нужно это поведение, так как я слишком много файлов в import и имя файла могут отличаться в зависимости от условия. Возможно ли это?

ответ

4

Сортировка, да.

boolean condition = evaluateItSomehow(); 
request.setAttribute("condition", condition); 
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response); 

Затем в page.jsp используя JSTLc:if:

<head> 
    <c:if test="${condition}"> 
     <link rel="stylesheet" type="text/css" href="style.css"> 
     <script type="text/javascript" src="script.js"></script> 
    </c:if> 
    ... 
</head> 

Update:, так как вы, кажется, есть более чем один файлов для этого, вы можете даже сделать его более гибким, просто установив нужный имя файла суффикс (или префикс или даже полное имя, что вам нравится):

String suffix = evaluateItSomehow(); 
request.setAttribute("suffix", suffix); 
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response); 

и

<head> 
    <link rel="stylesheet" type="text/css" href="style_${suffix}.css"> 
    <script type="text/javascript" src="script_${suffix}.js"></script> 
    ... 
</head> 

Если вы установите suffix на, например "foo", это будет загружать style_foo.css и script_foo.js. Я думаю, что это дает достаточно новых идей.

+0

hello :) есть ли какие-либо проблемы с кешем бластера при использовании этого метода? если я хочу загрузить одну и ту же страницу на разных условиях, используя много видов css? с кэшем браузера браузера css? – thekucays

1

Вы пытаетесь вставить Javascript и CSS в dom? Я сделал бы это с клиентской стороны. Я имею в виду, это возможно, чтобы сделать это, явно выписав код для <script...> или <link...>. Лучший способ сделать это - отправить что-то обратно клиенту, который сообщает ему добавить таблицу стилей или Javascript.

Затем вы можете добавить его динамически как так:

Если это не должно быть сделано динамически, то это еще проще. Просто установите флаг, а в JSP или ASP проверьте состояние флага. В условном теге вы добавите код для вашего CSS и Javascript. Тем не менее, я исхожу из вашего вопроса, что это первый.

0
function loadjscssfile(filename, filetype) { 
      if (filetype == "js") { //if filename is a external JavaScript file 
       // alert('called'); 
       var fileref = document.createElement('script') 
       fileref.setAttribute("type", "text/javascript") 
       fileref.setAttribute("src", filename) 
       alert('called'); 
      } 
      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) 
     } 

Назовите эту функцию javascript для динамической загрузки файла css и js. Передайте полный путь к файлу с именем в аргументе 'filename'.

Смежные вопросы