Заставить динамически загружаемый JavaScript не кэшироваться в Google Chrome - PullRequest
2 голосов
/ 09 ноября 2010

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

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

Я загружаю объект сценария java, используя отличный трюк, который я нашел в другом месте в 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 фактически не загрузится, прежде чем приступить к инициализации.

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 09 ноября 2010

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

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

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 голосов
/ 09 ноября 2010

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

Header set Cache-Control "no-cache"

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

Существуют и другие способы отправки этой информации заголовка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...