3

У меня есть эмулятор, который я написал для тестирования веб-приложений для смарт-ТВ. Сам эмулятор - это веб-приложение с простым интерфейсом, показывающим телевизор и удаленный доступ, и загружает веб-приложение, тестируемое внутри iframe. Пользователи запускают эмулятор из командной строки, который запускает два простых HTTP-сервера (один для эмулятора, один для тестируемого веб-приложения), затем запускает chrome, используя ключ командной строки -app, указывающий его на мой эмулятор.Предотвращение кэширования iframe в Chrome

Проблема в том, что каждый раз, когда Chrome запускается, он загружает кешированную версию веб-приложения. Если вы внесли изменения в свое веб-приложение с момента последнего запуска, они не отображаются, пока вы не будете сильно обновлять страницу.

Чтобы обойти эту проблему, я попытался следующие:

  • Запуск Chrome с добавлением переключателя повреждают-кэша
  • добавляющим случайный из параметров запроса в URL запуска передается хром (например: --app=http://localhost:6001/?random={some_hash})
  • прилагая случайный параметров запроса к веб-приложения URL, указанный в IFRAME

ни один из них, кажется, сделать трюк, однако. Код эмулятора, похоже, не кэшируется, поскольку URL-адрес src в iframe действительно получает новое случайное значение, добавляемое к нему каждый раз. Однако страница, загруженная в iframe, является старой и всегда требует обновления после первоначального запуска.

Любые другие вещи, которые я могу попробовать, чтобы я не накрывал выше?

Далее пример выпуска:

  • Пользователь запускает эмулятор впервые для веб-приложение 1
    • Веб-приложение 1 показано в эмуляторе
  • Пользователь закрывает эмулятор
  • Пользователь запустил чес эмулятор для веб-приложение 2
    • Веб-приложение 1 показано в эмуляторе

В этом случае эмулятор будет запущен и до сих пор показывают, веб-приложение 1. Он продолжает демонстрировать веб-приложение 1 до обновления, пока пользователь не выполнит жесткое обновление (cmd + shift + r), после чего отобразится веб-приложение 2.

+0

Поскольку вы контролируете сервер, вы пробовали, включая все возможные директивы для отключения кэширования в заголовках ответа? – Xan

+0

Хорошая точка. Хотя я не уверен, как бы я это сделал. Эмулятор упакован как рубиновый камень, и я использую webrick в качестве http-сервера. Наверное, у меня есть кое-что. – Danny

+0

[This] (http://tobyho.com/2009/09/16/http-server-in-5-lines-with/) - интересная страница. – Xan

ответ

7

Это звучит, как это может быть связано с ошибкой здесь: https://code.google.com/p/chromium/issues/detail?id=324102

В качестве обходного пути, я обнаружил, что установка IFrame SRC из JavaScript ВМЕСТЕ С добавлением случайных параметров запроса в URL, кажется, сделать трюк , Просто одно или другое не работает.

Пример:

// still loads stale page 
document.getElementById('tv-screen').src = 'http://localhost:6001/'; 

// will load fresh page 
document.getElementById('tv-screen').src = 'http://localhost:6001/?rand=' + Math.round(Math.random() * 10000000); 
+0

'Math.round (Math.random() * 10000000)' = Великолепно! –

+2

Или вы можете просто использовать временную метку: ''http: // localhost: 6001 /? Rand =' + (+ new Date())' –

+0

вы можете пойти? Rand = '+ new Date()/1 – Alex

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