2011-09-21 2 views
0

Вместо:Можно ли использовать переменную для яваскрипта ссылки

<script src="/scripts/myJsFile.v1.js" type="text/javascript></script> 

Есть что-то вроде

<script src="/scripts/myJsFile." + versionVar + ".js" type="text/javascript></script> 

Таким образом, когда мы обновляем версии JS файлов, которые пользователь не должен очистите их кеш.

+9

Что вы думаете, что переменная будет взялось? – SLaks

+0

Если вы думаете о 'versionVar' как переменной JavaScript, то нет, вы не можете сделать это * этот * путь. Однако вы можете вставить динамический скрипт. –

+0

Вы не можете включить переменную в обычный HTML для динамического определения источника JS – rabudde

ответ

5

Не так, потому что вы смешиваете HTML и JavaScript вместе. HTML не имеет доступных переменных JavaScript.

Однако, вы можете добавить тег <script> динамически, то есть через JavaScript. Таким образом, вы, очевидно, являются возможность использовать переменные:

<script> 
var versionVar = "1.0"; 

window.addEventListener('load', function() { // on load 

    var scriptTag = document.createElement('script'); // create tag 
    scriptTag.src = "/scripts/myJsFile." + versionVar + ".js" // set src attribute 
    scriptTag.type = "text/javascript"; //set type attribute 
    document.getElementsByTagName('head')[0].appendChild(scriptTag); // append to <head> 

}, false); 
</script> 
2

Вы не можете сделать это непосредственно в своем HTML-файле. Но все же вы можете сделать это внутри тега сценария, если versopnVar является переменной JavaScript в вашем window контексте:

<script type="text/javascript"> 
var script = document.createElement('script'); 
script.setAttribute('src', '/scripts/myJsFile.' + versionVar + '.js'); 
script.setAttribute('type', 'text/javascript'); 
document.body.appendChild(script); 
</script> 

В конце концов, это не хорошо делать это Подход. Пожалуйста, прочитайте эту статью в списке, чтобы получить информацию.

Alternative Style: Working With Alternate Style Sheets

1

Вероятно, было бы лучше, чтобы сделать что-то вроде

<script src="/scripts/myJsFile.js?v1" type="text/javascript></script> 

Затем, когда вы делаете и обновление:

<script src="/scripts/myJsFile.js?v2" type="text/javascript></script> 

который заставит большинство браузеров тянуть файл, а не извлекать из кеша. Это означает, что у вас не будет отдельных JS-файлов. Но просто заставит пользователя вытащить самое последнее.

Кроме того, если вы хотите, чтобы он всегда тянул файл, вы можете аналогичным образом добавить случайный int.

1

Вы не можете сделать это прямо.

Один из способов с некоторым кодом на стороне сервера.
Например, в PHP:

<?php $version = "1.0"; ?> 

<script src="/scripts/myJsFile.<?php echo $version ?>.js" type="text/javascript></script> 
+1

Спасибо, но мы не используем PHP – Darcy

0

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

Вы можете использовать строку запроса, чтобы сделать ваш JS уникальным.

<script src="/scripts/myJsFile.js?version=2" type="text/javascript></script> 

маршалом & Я была такая же идея.

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

2

Проверьте, как Google загружает свою Google Analytics.Тогда, возможно, попробуйте что-то подобное:

(function() { 
    var versionVar = 9; 

    var ga = document.createElement('script'); 
ga.type = 'text/javascript'; 
ga.src = 'http://www' + '.google-analytics.com/ga' + versionVar + '.js'; 

    var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(ga, s); 
})(); 
1

Не совсем так, но вы можете создать новый узел сценария, например. document.createElement и добавьте его на страницу.

var s = document.createElement("script"); 
s.src = ... 
document.body.appendChild(s); 

Вы можете также использовать document.write вызов сделать то же самое ...

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