强制浏览器获取某些源(CSS、JS 等)的最新版本 [重复]

Posted

技术标签:

【中文标题】强制浏览器获取某些源(CSS、JS 等)的最新版本 [重复]【英文标题】:Force browser to get last version of certain sources (CSS, JS, etc.) [duplicate] 【发布时间】:2019-11-21 09:07:04 【问题描述】:

当有人访问我的网站时,我想确保浏览器具有我的文件 CSS、JS 等的最新版本。我的想法是在我的链接上添加额外的参考:

而不是使用

<script type="text/javascript" src="www.mywebsite.com/my_file.js"><script>

我在打电话

<script type="text/javascript" src="www.mywebsite.com/my_file.js?lastUpdate"><script>

我设法将 lastUpdate 替换为文件的最后修改日期。该链接变为“新”并且浏览器正在更新他关于该文件的缓存。 请注意,我所有的文件都在我的服务器上。

为此,我调用了一个 php 函数(摘要)

function getLastUpdate($link)
    if(file_exists($link))
        return $link.'?'.filetime($link);
    
    return $link;

并称之为:

echo '<script type="text/javascript" src="'.getLastUpdate('www.mywebsite.com/my_file.js').'"><script>';

一切正常。几乎。函数存储在./code/function.php 它被许多不同文件夹中的许多文件使用。我的问题:我不知道该为 $link 放什么。关于 url 地址,它有时有效,有时无效。如果我给出绝对文件路径(对我来说会更容易),函数 file_exists 返回 false。如果我给出一个相对路径,它有时会起作用,有时不会。我想是因为我正在使用 url 重写,并且链接正在更改?

我做错了什么?我应该如何解决这个问题? 谢谢!

【问题讨论】:

我在这里解释我面临的问题,我是如何尝试解决它的。我愿意以任何其他方式来实现它...例如更改文件的标题? 【参考方案1】:

我正在使用这种代码来获取最新版本:

功能:

function file_versioning($file)
    $filemtime = filemtime($file);
    return "$file?v=$filemtime";

“Core.php”中函数的调用:

$CssLib = file_versioning("$IncDir/Lib.css");
// $IncDir is the relative path from the php script to the "library folder"
echo <<<EOD
    <link rel="stylesheet" type="text/css" href="$CssLib" />
EOD;

“index.php”中“核心”的调用:

$IncDir ='.inc/Libs';
require $IncDir.'/Core.php';

⋅ ⋅ ⋅

我不知道这是否是最好的方法……但是,那行得通。 我可以在不同的地方多次调用内核,但是内核使用的相对路径写在每个调用脚本中。

【讨论】:

这与我的代码类似,我们的想法相同。但是你给 $file 什么?绝对的,相对的,等等?如果找不到文件,此函数将返回错误 @FenixAoras 我正在研究它,但想在您的主题关闭之前发布答案。我已经更新了!这种东西对你有用吗? 我试图转换我的所有链接以使它们像这样从根目录开始 > ./code/script.js 但是文件时间有时会抛出错误“stat failed for filelink...” @FenixAoras 也许这就是我使用相对路径的原因...... :)(我不记得确切,已经有一段时间了!)

以上是关于强制浏览器获取某些源(CSS、JS 等)的最新版本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

仅当它们已更改时才强制浏览器重新加载 css/js

jQuery Mobile 应用强制浏览器忽略缓存页面

又一个秘密如何让浏览器访问最新的js,css等外部引用

解决index.html缓存问题

css,js文件后面加一个版本号

强制 CKEDITOR 刷新配置