제가 특정 대상인에게 캐시없이 새로고침이 필요해서 자바스크립트로
location.reload(true);
를 사용해서 캐시 무시하고 서버에서 새로 가져오게 해 놓았는데요.
크롬의 특정 버전 이후 부터는 이게 false 로 되는 캐시된 것을 가져오는 일반 새로고침으로 동작하더군요.
이게 크롬에서 놓치고 있는 버그인가요? 아니면 이유를 가지고 막아 놓은건지 궁금하네요.
제가 특정 대상인에게 캐시없이 새로고침이 필요해서 자바스크립트로
location.reload(true);
를 사용해서 캐시 무시하고 서버에서 새로 가져오게 해 놓았는데요.
크롬의 특정 버전 이후 부터는 이게 false 로 되는 캐시된 것을 가져오는 일반 새로고침으로 동작하더군요.
이게 크롬에서 놓치고 있는 버그인가요? 아니면 이유를 가지고 막아 놓은건지 궁금하네요.
이게 해당 페이지에 meta 소스로 (Expires 헤더 시간을 과거로 지정하거나, Cache-Control 헤더를 no-cache, no-store, must-revalidate로 지정해 캐싱을 강제로 끄는 등)
를 넣어봤는데 새로고침 시 파일 들을 새로 가져오지 않더군요. 제가 잘못 테스트한 건지는 모르겠습니다.
저 스크립트가 제공되는 사용자에게 애드온에서
Context::addHtmlHeader('<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />');
Context::addHtmlHeader('<meta http-equiv="Pragma" content="no-cache" />');
Context::addHtmlHeader('<meta http-equiv="Expires" content="0" />');
이렇게 해봤었습니다.
if (!in_array(Context::get('act'), array('dispBoardDelete'))) {
Context::addHtmlHeader('<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />');
Context::addHtmlHeader('<meta http-equiv="Pragma" content="no-cache" />');
Context::addHtmlHeader('<meta http-equiv="Expires" content="0" />');
Context::addJsFile('./addons/name/js/reload.js', true, '', -10000, 'body');}
}
js 파일
if (self.name != 'reload') {
alert("본문에 서버에서 지워진 이미지 소스가 있습니다. 글 수정해서 정리해주세요. 글 수정창 혹은 본문에서 잠시 보이는 이미지는 브라우저에 임시로 캐시된 이미지입니다.");
self.name = 'reload';
self.location.reload(true);
}
else self.name = '';
이렇게 했는데 안됩니다.
-- 아참, 저 코드가 동작되는 조건이 before_display_content 로 되어 있습니다.
물론 다른 브라우저(ff,ie)는 그냥 됩니다.
아마 meta태그로 지정해도 문서내 파일의 캐시까지 실제로 초기화하진 않는것 같습니다.
아무래도 캐시가 사라지는 경우를 최소화해서 브라우저 불러오는 속도를 늘리려 한게 아닐까 싶습니다.
이런게 검색이 되긴 했는데 뭐라 하는지 정확히 이해는 안가네요.