0

如果我的网站更新了,我的意思是 CSS 和一些内容,并且在更新老访问者返回我的页面时 CSS 不会自动刷新,你必须手动刷新页面。好吧,访问者不是专家,他们首先会认为该页面已损坏或有问题。

如何使用 Javascript 或 PHP 编写脚本,任何...这样当有人访问页面/网站时,我希望页面在它向访问者打开之前被刷新。如果它只在索引页面上完成这项工作就可以了。

可能吗?

我在谷歌帮助下找到了这个脚本,但它不起作用,什么也没有发生!

<script type='text/javascript'>

(function()
{
  if( window.localStorage )
  {
    if( !localStorage.getItem( 'firstLoad' ) )
    {
      localStorage[ 'firstLoad' ] = true;
      window.location.reload();
    }  
    else
      localStorage.removeItem( 'firstLoad' );
  }
})();

</script>
4

2 回答 2

2

您最好的选择是“版本”您的 css 网址:

<link type="text/css" rel="stylesheet" href="my_style_sheet.css" />

变成

<link type="text/css" rel="stylesheet" href="my_style_sheet.css?v=2.1" />

任何时候更新样式表只需修改 URL。您已将此问题标记为 PHP,因此只需将版本作为变量或常量存储在通用includeed 文件中,这将非常简单:

<link type="text/css" rel="stylesheet" href="my_style_sheet.css?v=<?=CSS_VERSION;?>" />

如果您必须在 Javascript 中执行此操作,您可以让 javascript 将其上具有唯一标记(例如时间戳)的新样式表加载到head标记中,但这会浪费带宽并减慢页面加载速度,因为用户会最终下载了两个样式表:

var css_file=document.createElement("link");
css_file.setAttribute("rel", "stylesheet");
css_file.setAttribute("type", "text/css");
css_file.setAttribute("href", 'link_to_css.php?random_string='+escape(Math.random()));
document.getElementsByTagName("head")[0].appendChild(css_file);

您还可以在 CSS 标头中设置较短的缓存过期时间(使您的 css 文件成为.php发送 css 标头并添加过期标头的文件:

<?php header("Expires: [DATE IN PAST OR NEAR FUTURE]"); ?>

或者在您的网络服务器配置中(例如在 Apache 中),您可以根据文件类型设置默认缓存标头,因此可以将 CSS 设置为具有快速到期期限。但是,由于您正在破坏用户浏览器缓存的一些优势,您的应用程序的性能将再次受到轻微影响。

于 2013-01-25T21:38:18.850 回答
0

啊,你需要的是“缓存破坏”。Ben D 描述的技术很好,但有点过于实际。试试这个:

<link type="text/css" rel="stylesheet"
    href="my_style_sheet.css?<?=filemtime('my_style_sheet.css')?>" />

您还可以考虑其他一些事情,但这是最基本的自动缓存清除技术。

请注意,通过这样做,您可以将缓存超时设置为较长的​​时间,例如“1 年”,因为每次文件更改时,文件的链接也会更改。

于 2013-01-25T21:50:46.527 回答