В настоящее время я пытаюсь загрузить некоторые js-файлы асинхронно, чтобы они не могли блокировать остальную часть сайта.
Я в основном следовал описаниям, найденным здесь:
Асинхронный Javascript
С точки зрения неблокирующей загрузки файла javascript это прекрасно работает, но у меня возникла проблема, что файл javascript кэшируется и остается в кэше, даже если я изменяю содержимое (также выполнение shift-reload ничего не помогает) .
Мой текущий код загрузки скрипта выглядит следующим образом:
(function() {
function xx_async_load() {
var xx = document.createElement('script');
xx.type = 'text/javascript';
xx.async = true;
xx.src = 'http://myserver.de/myjs.js';
var el = document.getElementsByTagName('script')[0];
el.parentNode.insertBefore(xx, el);
}
if (window.addEventListener) {
window.addEventListener('load', xx_async_load, false);
} else if (window.attachEvent){
window.attachEvent('onload', xx_async_load);
}
})();
Если я вызываю код внутри «xx_async_load» напрямую и изменяю myjs.js, изменения распознаются, но если я загружаю это через событие onload, оно всегда остается в кэше, а измененные никогда не распознаются.
Кто-нибудь знает решение, как заставить браузер распознавать изменения в кэшированных файлах (проблема возникает в Opera, FF и IE работают нормально)?
РЕДАКТИРОВАТЬ: Если я смотрю на вкладку «Сеть» Operas Dragonfly, даже не делается запрос на перезагрузку для кэшированного файла JS, кажется, что он непосредственно загружает его из кэша даже не проверяя файл на сервере.
EDIT2: Я проверю, как долго он остается в кеше. Если его нет до завтра, то все в порядке. В противном случае я все еще могу предложить обходной путь с параметром даты (поэтому принимаю этот ответ). Спасибо еще раз.