如何在IOS Safari上禁用缓存?

38

有没有办法在iPad / iPhone上禁用缓存?我想进行一些非缓存体验的自动化测试。


在Web服务器前面放置反向代理并添加请求禁用缓存的头信息,这样做公平合理吗? - sarnold
@sarnold,请看下面我的答案,使用Fiddler是更简单的实现相同功能的方法。 - muzzamo
如果您能够管理,就给每个URL附加一个不同的虚拟参数。 - Hot Licks
6个回答

42

我刚刚发现了在iOS Safari中禁用缓存的方法:

iOS

  1. 打开设置
  2. 导航到Safari > 高级选项
  3. 启用Web检查器
  4. 返回Safari并加载网页

桌面版

  1. 打开 Safari
  2. 导航到Safari > 偏好设置 > 高级选项选项卡
  3. 启用开发菜单
  4. 开发菜单中,选择您的iOS设备名称 > 要调试的页面
  5. 按Command-Shift-R重新加载同时禁用缓存
  6. 奖励:这是在您的计算机上对您iOS设备上的页面进行完整的Web检查器检查

如果您想要更加永久性的解决方案,您可以使用代理路线或创建一个禁用缓存的UIWebView/WKWebView包装应用程序。


1
阅读iOS Web Inspector的信息并没有提供任何有关如何禁用缓存的线索。 https://developer.apple.com/library/safari/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/Introduction/Introduction.html - james.garriss
这可能适用于您的根文件,但我发现iOS Safari不会重新加载可能通过javascript调用(如Angular)加载的项目。在这种情况下,您需要安装和使用像Charles或Fiddler这样的代理。您还需要完全清除缓存,因为iOS Safari仍会缓存文件,直到从代理获取新的“无缓存”文件! - Chris Hill
这个快捷键是用于“从源重新加载页面”的,它实际上并不清除缓存。它会在不查看缓存的情况下加载资源。以这种方式完成的加载的响应可能会被缓存以供以后的请求使用。 - Brian Burg
2
尽我所能让 Safari 不缓存文件,但它很棘手。我选择了开发 > 清空缓存以及开发 > 禁用缓存,然后还必须在设备上使用设置 > Safari > 清除历史记录和网站数据来清除缓存,并从服务器中删除文件,直到出现文件不存在的错误,然后重新放置文件并重新加载。我想,在 Safari 移动端调试复杂的 JavaScript 应用程序肯定是一场噩梦。我还不得不在服务器端使用 nginx 禁用缓存。 - Christopher
2
这个变成了 Command + Option + R(选项键代替 Shift 键) - atdrago
显示剩余2条评论

17

我可能说错了,但在iOS上将Safari置于“隐私浏览”模式下会禁用缓存吗?


1
如果测试失败,可以通过在POST或GET中添加随机变量来测试URL。这样做可以绕过缓存,因为每次都是一个新的URL。常见的方法是获取当前时间戳并访问your-url.com/page.php?rand=(current timestamp)。 - James Gupta
1
看起来你是正确的,这是一个很棒(而且简单!)的答案。http://osxdaily.com/2013/10/19/private-browsing-safari-ios/ - james.garriss
1
这是一个很好的解决方案,特别是如果你只想进行一些快速测试而不需要打开开发者工具。但要记住,只要标签页保持打开状态,缓存就会持续存在,所以如果你想清除缓存,就需要关闭标签页并重新打开它。 - Tim Mackey

14

有一种方法可以有效地禁用iPhone/iPad/IOS上的缓存。

在Windows桌面上安装Fiddler,并允许远程计算机连接:

输入图像说明

在IOS中,在您的Wi-Fi连接设置下设置代理,指向运行Fiddler的计算机的IP地址,端口为8888(假设您没有从Fiddler默认值更改它):

输入图像说明

现在,Fiddler应该拦截您的设备正在进行的所有网络请求。

您现在可以从Fiddler的Rules-> Performance菜单中禁用缓存。

输入图像说明


这应该是被接受的答案。使用代理是真正禁用缓存的唯一方法。'忽略缓存重新加载'只会重新加载iOS Safari可以确定为初始页面加载的部分。 - Chris Hill

3
似乎不太可能。在桌面版 Safari 中,有一个选项可以在开发者工具中禁用缓存,但在移动版 Safari 中没有这个选项。我在 Opera 等其他浏览器中也没有找到这个选项。
如果您想尝试,可以覆盖桌面版 Firefox 的用户代理字符串,使其成为假的 iPad 移动浏览器,然后禁用缓存。但这取决于您要测试什么,可能根本不起作用。
希望这能帮到您。

0

在最新的MACOS中,没有任何东西可以“完全重新加载”内容。调试并不是什么愉快的事情。

连接桌面Apple SafariiPhoneiPad后 - 应该可以使用ALT+CMD+R - 但对我来说不起作用。

最新的技巧是

  1. 按住CTRL+SHIFT
  2. 并单击而不是触摸,“重新加载页面”图标

也许会帮助某些人。

感谢灵感 https://dev59.com/E2ox5IYBdhLWcg3wbDsk#24129161


-1

我使用iOS模拟器9.0,发现无论是在开发者-禁用缓存菜单项中勾选还是按下Cmd-Shift-R重新加载,都未能完全绕过缓存。唯一有效的方法是按住Shift键并在Safari开发者工具中点击重新加载按钮。

enter image description here


Safari 9.0.3 Web Inspector中找不到按钮。有任何想法在哪里可以找到它吗? - Gamadril
@Gamadril - 嘿 - 看起来它已经跳到了主控制台栏并变得更大了。我还没有真正测试过它,但它具有使用Shift键清除缓存的相同描述:带标记位置的截图 - Hal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接