如何防止Firefox和Safari缓存iframe内容?
我有一个简单的网页与iframe到一个不同的网站上的页面。外部页面和内部页面都有HTTP响应头,以防止缓存。当我在浏览器中单击"back“按钮时,外部页面可以正常工作,但无论如何,浏览器始终会检索iframed页面的缓存。IE运行得很好,但是Firefox和Safari给我带来了麻烦。
我的网页看起来像这样:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
var
变量总是变化的。尽管iframe的URL已经更改(因此,浏览器应该对该页面发出新的请求),但浏览器只是获取缓存的内容。
我检查了来回传递的HTTP请求和响应,我注意到即使外部页面包含<iframe src="webpage2.html?var=222" />
,浏览器仍然会获取webpage2.html?var=111
。
这是我到目前为止尝试过的:
我无法执行任何JavaScript技巧,因为我被同源策略阻止。
我的想法快用完了。有人知道如何阻止浏览器缓存iframed内容吗?
更新
我按照丹尼尔的建议安装了Fiddler2来执行另一个测试,不幸的是,我仍然得到相同的结果。
这是我执行的测试:
Math.random()
生成随机数。页上显示随机数调用iframe,传入随机number.
通过这项测试,我能够准确地看到哪些页面正在更新,哪些页面被缓存。
视觉测试
为了快速测试,我加载页面,导航到另一个页面,然后按“back”。结果如下:
原始页面:
离开页面,然后回击:
0.4470929019483644
这表明内部页正在被缓存,即使外部页在URL中使用不同的GET参数调用它。由于某些原因,浏览器忽略了iframe正在请求新URL的事实;它只是加载旧的URL。
Fiddler测试
果然,Fiddler证实了同样的事情。
(我加载页面。)
外部页面被调用。HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
调用http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206。
(我离开页面,然后点击返回。)
外部页面被调用。HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
调用http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206。
从这个测试中,看起来web浏览器似乎没有缓存页面,但它缓存了iframe的URL,然后在缓存的URL上发出新的请求。然而,对于如何解决这个问题,我仍然感到困惑。
有没有人有关于如何阻止web浏览器缓存iframe URL的想法?
发布于 2016-03-18 03:22:48
截至2016年3月17日,我在Mac OS X上最新的Chrome和最新的Safari中发现了这个问题。上面的修复对我都不起作用,包括将src分配给空的然后返回到某个站点,或者添加一些随机命名的"name“参数,或者在散列后的URL末尾添加一个随机数,或者在分配src之后将内容窗口href分配给src。
在我的例子中,这是因为我使用Javascript来更新IFRAME,并且只切换URL中的散列。
在我的例子中,解决方法是我创建了一个临时URL,它有一个0秒的元重定向到另一个页面。它发生得如此之快,以至于我几乎没有注意到屏幕的闪光。另外,我将中间页面的背景颜色设置为与其他页面相同,这样您就更不会注意到它了。
https://stackoverflow.com/questions/2648053
复制相似问题