Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Safari中重新加载网站的javascript和css文件_Javascript_Iphone_Safari - Fatal编程技术网

在Safari中重新加载网站的javascript和css文件

在Safari中重新加载网站的javascript和css文件,javascript,iphone,safari,Javascript,Iphone,Safari,这让我发疯。每个浏览器和设备都有自己的清除缓存和重新加载.js和.css文件的方法。例如,我可以在Chrome中执行此操作的唯一方法是转到我的登录页面,执行F12加载调试器并继续。这似乎是在windows中完成此操作的唯一方法 在windows中的旧safari上,您可以从菜单执行此操作,就像在IMac桌面上的safari中一样 但是你在IPhone或IPad上是怎么做的呢 我正在使用IMac调试手机,但无论我如何调试,.js文件都保持不变。当我在网站上查看页面时,变化就在那里 我试着把手机撞坏

这让我发疯。每个浏览器和设备都有自己的清除缓存和重新加载.js和.css文件的方法。例如,我可以在Chrome中执行此操作的唯一方法是转到我的登录页面,执行F12加载调试器并继续。这似乎是在windows中完成此操作的唯一方法

在windows中的旧safari上,您可以从菜单执行此操作,就像在IMac桌面上的safari中一样

但是你在IPhone或IPad上是怎么做的呢

我正在使用IMac调试手机,但无论我如何调试,.js文件都保持不变。当我在网站上查看页面时,变化就在那里

我试着把手机撞坏,双击刷新按钮,把它放在私人模式,然后再回来。什么都不管用。有趣的是,我在private move中尝试了它,在“开发”菜单中,我可以看到.js文件的两个版本——一个有更改,一个没有。当我回到非私有模式时,旧的.js文件(没有更改)就在那里

我还试图删除我网站的网站数据,但没有成功

有人知道怎么做吗

谢谢


Tom

在包含JS或CSS时附加查询字符串,并在更新代码时更改它。它将使该文件的缓存本地版本无效

<script src="test.js?1234567"></script>


使用时间戳很常见。

转到Safari->首选项->单击高级选项卡底部的高级选项卡单击显示“在工具栏中显示开发菜单”的复选框,然后关闭首选项。然后,您可以在程序栏中打开“开发”菜单,其中包含Safari、文件、编辑、查看等功能。。。在iOS 10中,您可以通过进入设置>Safari并单击“清除历史记录和网站数据”来清除缓存

对我来说,这有点过分,因为我不想删除每个站点的所有内容。因此,我要做的是直接浏览到js或css文件,如果它是较旧的缓存版本,则重新加载它。

我认为没有“简单”的方法可以做到这一点。我已经尝试了以上所有方法,包括修改css和js查询字符串。最有效的是罗卡迪勒的评论

打开设置--Safari--网站数据

然后清除要刷新的站点

提示:如果您正在调试一个页面,请使用IP地址,然后它将显示在此列表的顶部。保持safari和网站数据都处于打开状态,以便您可以在两者之间切换

这不像ctl-F5那么简单,但肯定比清除整个浏览器的缓存干扰小。

2回答:

第一个答案:点击tabs图标,然后选择Private并粘贴并转到URL,如果您只需要强制刷新一次。私有会话将永远不会有任何缓存版本,除非它缓存在中间代理上。当然,它将缓存同一文件的后续请求。您可以关闭私有会话并创建一个新的会话,这与切换到应用程序的烦扰程度大致相同。

第二个答案:如果您是一名开发人员,并且正在使用Apache,您可以设置一个.htaccess文件,如下所示:

<filesMatch "\.(html|htm|js|css)$">
  FileETag None
  <ifModule mod_headers.c>
     Header unset ETag
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
     Header set Pragma "no-cache"
     Header set Expires "Wed, 21 Oct 2015 07:28:00 GMT"
  </ifModule>
</filesMatch>

FileTag无
标题未设置ETag
标题集缓存控制“最大年龄=0,无缓存,无存储,必须重新验证”
标题集Pragma“无缓存”
标题集过期“2015年10月21日星期三07:28:00 GMT”

我发现这个解决方案适用于iOS Safari和其他浏览器

它执行
window.location.reload(true)
以强制页面重新加载,避免在检测到缓存的web应用或网页与服务器版本不匹配时使用缓存

你真的希望在发布网站的第一个版本之前就有这个机制,否则一旦它出现,你就不能再依赖于升级你的iOS用户了。如果您依赖客户端应用程序和服务器版本同步,这将是一场噩梦。叹息。。。不幸的是,Safari和iOS Safari似乎特别渴望这样做

部署期间
  • 递增并保存生成编号
  • 我使用的
    version.json
    文件看起来像
    {“major”:1,“minor”:0,“patch”:0,“build”:12}
  • version.json
    复制到客户端和服务器应用程序
在服务器上:
  • 用PHP/Node/Ruby/C编写一个服务器API,返回服务器的
    version.json
  • 使用web服务器规则和响应头来防止缓存API结果
在客户端应用程序或网页中:
  • 要诊断问题,请显示客户端版本+客户端和服务器内部版本号
页面加载时调用

函数onload(){
var clientVersion=require(“./version.json”);
//可能会用新的fetch()API或旧的XMLHttpRequest替换axios
get(“/api/version”).then(函数(res){
var serverVersion=res.data;
var lastReload=parseInt(localStorage.getItem(“lastReload”)||“0”);
var now=new Date().getTime();
如果(
serverVersion.build!==clientVersion.build&&
现在-lastReload>60*1000//防止无限次重新加载。
) {
setItem(“lastReload”,现在);
window.location.reload(true);//强制重新加载页面
}
});
}
您可能更喜欢测试
serverVersion.build>clientVersion.build
而不是
serverVersion.build!==clientVersion.build
。测试
的好处==允许您不仅升级版本,而且回滚版本,并确保客户端也回滚

如果客户机和服务器的内部版本号不匹配,我可以通过在60秒内只执行一次重新加载来防止客户机无限地重新加载

请注意,此方法仅与匹配的内部版本号(=部署号)有关。您可能更喜欢更复杂的方法

这里有一个简单的例子