1

Я работаю над загрузчиком карт Google (с использованием API javascript Google Maps). Я хочу динамически добавлять точки к пути, когда и когда они появятся. Редактировать: Веб-страница и javascript хранятся и загружаются локально, а не через веб-сервер.Задание динамически загруженного javascript, чтобы не кэшировать на google chrome

С этой целью я создал внешний файл javascript, в который я помещаю данные, которые я хочу использовать.

я загрузить объект Java Script, используя большой трюк я нашел в другом месте на StackOverflow:

function loadjsfile(filename, callback) 
{ 
    var fileref = document.createElement('script'); 
    fileref.setAttribute("type", "text/javascript"); 
    fileref.setAttribute("src", filename); 

    var done = false; 
    fileref.onload = fileref.onreadystatechange = function() 
    { 
     if(!done && (!this.readyState 
           || this.readyState == "loaded" 
           || this.readyState == "complete")) 
     { 
       done = true; 

       // Continue your code 
       callback(); 

       // Handle memory leak in IE 
       fileref.onload = fileref.onreadystatechange = null; 
       document.getElementsByTagName("script")[0].removeChild(fileref); 
     } 
    }; 
    document.getElementsByTagName("script")[0].appendChild(fileref); 
} 

Это прекрасно работает, как он ждет, пока внешний Javascript фактически не загружен, прежде чем приступить к intialisation.

Так что все это прекрасно, он отлично заряжается. Затем я устанавливаю 5-секундный тайм-аут, который перезагружает внешний файл javascript. Здесь у меня проблема. Google chrome перезагружает внешний файл javascript из кеша, а не переходит прямо на диск. Это огромная боль, так как это означает, что мой путь к карте не обновляется по мере продвижения. Мне это действительно нужно.

Когда я обновил всю страницу, тогда было хорошо, что она перезагрузила javascript, но мерцание было очень раздражающим (и это вынудило карту вернуться в «начальное» состояние). Этот новый метод будет отлично работать, если я могу заставить его повторно загружать файл javascript каждый раз.

Может ли кто-нибудь мне помочь?

Я новичок в Javascript (я в основном C++ кодер), поэтому извинения, если я спрашиваю что-то глупое: D

ответ

2

Если у вас нет других идей, попробуйте добавить случайное число в качестве строки запроса к имени файла. Это скажет скрипту, что файл новый и должен принудительно перезагрузить.

В основном генерируйте случайное число каждый раз.

var rnd = Math.floor(Math.random()*80000); 

Таким образом, вы код будет выглядеть примерно так

function loadjsfile(filename, callback) 
{ 
    var rnd = Math.floor(Math.random()*80000); 
    var fileref = document.createElement('script'); 
    fileref.setAttribute("type", "text/javascript"); 
    fileref.setAttribute("src", filename + "?r=" + rnd); // note this line 

    // other code... 
} 
+0

Сладкий, который, похоже, работает. Можете ли вы объяснить, почему это работает?Если я правильно понимаю, его отправка запроса на javascript, но я не понимаю, почему это заставило бы перезагрузить. – Goz

+0

Поскольку браузер считает, что это другой файл, то есть динамически созданная страница из-за изменения URL-адреса. Я не уверен, что браузер попытается кэшировать каждый *** случайный * url **, но это может стоить испытание с меньшим образцом. – Marko

+0

Хорошо, я думаю, я понимаю. В качестве запроса, отправленного в браузер, браузер не знает, как именно сервер вернется. Поэтому он не может использовать кешированную версию, потому что запрос может вернуть что-то совершенно другое. Строка запроса просто игнорируется, однако из-за того, что веб-браузер не знает, я не делаю ничего сложного. Это правильно? – Goz

0

Вы можете (если файл размещен на сервере Apache) добавить .htaccess в каталог, содержащий файл сценария с содержимым:

Header set Cache-Control "no-cache" 

Это предотвратит кеширование файла.

Есть также другие способы отправки данных заголовков.

+0

К сожалению, я должен был заявил, что это делается из местного магазина. Я обновил свой вопрос. – Goz

+0

Если вы делаете локальную разработку с помощью google chrome, отключите кеширование во время разработки. Сделайте это: Принесите инструменты для разработки (ctrl + shift + i) Щелкните по настройкам cog в правом нижнем углу. Общая вкладка. Отключить кеш. –

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

  • Нет связанных вопросов^_^