彻底解决swf浏览器的缓存问题
使用以下的方法,使SWF文件强制不从浏览器读本地的缓存。或强制其SWF文件每次都去服务器端读取最新的媒体文件,确保每次都读取最新的SWF文件。
1:使用"Expires"标头 这是在HTML文件中告诉浏览器不读取本地缓存
在<head> </head> 中间加以下代码
<!-- BEGIN Insert -->
<META HTTP-EQUIV="Expires" CONTENT="Mon, 04 Dec 1999 21:29:02 GMT">
<!-- END Insert -->
这样的话,每次访问这个文件都会告诉浏览器其缓存版本过期,将重新从服务器端读取最新的文件
2:直接告诉浏览器根本就没有缓存
在包含SWF文件的HTML页面里的</body>插入:
<!-- BEGIN Insert -->
<HEAD>
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
<!-- END Insert -->
没有Cache标头 不支持IE5版本,所以微软建议使用带Cacahe控制标头
3:当在HTML页面间连接跳转时
在点击超连接时将强制其从服务器上下载最新文档而不是从本地缓存中浏览
例如:
<A HREF="stockPrices.htm?1">Current stock prices</A>
以上方法将阻止读取本地缓存
4:如何阻止从缓存中读取加载变量
问题:
当从外部数据源加载数据时,有时浏览器将数据存贮在本地缓存中,这样就导致
在调用loadVariables方法加载数据时会从本地缓存中读取数据而代替从原始数据源
读取的信息。
解决:
为确保flash加载的是最新的变量,附加一个随机数变量,这样就可以原始档中加载最新的数据
例如:
方法一:
loadVariables("mypage.asp?nocache=" + random(65000), 0, "POST";
方法二:
loadVariables("mypage.asp?nocache=" + getTimer(), 0, "POST";
这样确保每次加载的数据是最新的.
[补充]
然而在实践中,我取发现在页面含有SWF文件时使用MM提供的方法,有时不是很灵验。
经过不断的测试,我发现使用一下的方法可以百分之百的解决flash读取本地缓存的问题
首先我们来看看页面中包含flash文件的代码:
<object classid="clsid27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="550" height="400" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="waizi.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="waizi.swf" quality="high" bgcolor="#ffffff" width="550" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
其红色的部分就是代表你要调用的flash 资源。我们可以简单的在其后附加一个变量就可以强制页面每次都从服务器端调用最新的SWF文件。
例如:xxxx.swf?rand=12334567
方法一: 如果是HTML页面,其不能自动改变变量的值,所以当你的SWF文件修改后上传服务器,你只要手工修改rand变量后面的数值就可以防止页面读取本地的SWF文件信息。
方法二: 如果你的页面是asp,php动态页面,则可以通过脚本来实现其动态修改变量值。
例如在asp页面中,使用vbscript产生一个随机数
<%
dim num
Randomize
num=Int((1000000*Rnd)+1)
%>
然后在你那一堆置入SWF文件的代码中,找到SWF文件名,并修改其为:
<param name=movie value="****.swf?rand=<%=num%>">
embed src="****.swf?rand=<%=num%>"
记住是两个地方,因为其适用于不同的浏览器。
如果使用javascript可以这样:
<script language="JavaScript">
function Rand(){
var Num=Math.floor(Math.random()*1000000);
document.write(Num);
}
</script>
然后在调用flash代码的地方修改为:
****.swf?rand=<script language="JavaScript">getRand();</script>
记得是一般要改两个地方。一个<object>用于IE的 一个<embed>用于非IE浏览器的
现在想想有了问题,第一个寻找答案的地方就是去adobe网站上查询。
1:使用"Expires"标头 这是在HTML文件中告诉浏览器不读取本地缓存
在<head> </head> 中间加以下代码
<!-- BEGIN Insert -->
<META HTTP-EQUIV="Expires" CONTENT="Mon, 04 Dec 1999 21:29:02 GMT">
<!-- END Insert -->
这样的话,每次访问这个文件都会告诉浏览器其缓存版本过期,将重新从服务器端读取最新的文件
2:直接告诉浏览器根本就没有缓存
在包含SWF文件的HTML页面里的</body>插入:
<!-- BEGIN Insert -->
<HEAD>
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
<!-- END Insert -->
没有Cache标头 不支持IE5版本,所以微软建议使用带Cacahe控制标头
3:当在HTML页面间连接跳转时
在点击超连接时将强制其从服务器上下载最新文档而不是从本地缓存中浏览
例如:
<A HREF="stockPrices.htm?1">Current stock prices</A>
以上方法将阻止读取本地缓存
4:如何阻止从缓存中读取加载变量
问题:
当从外部数据源加载数据时,有时浏览器将数据存贮在本地缓存中,这样就导致
在调用loadVariables方法加载数据时会从本地缓存中读取数据而代替从原始数据源
读取的信息。
解决:
为确保flash加载的是最新的变量,附加一个随机数变量,这样就可以原始档中加载最新的数据
例如:
方法一:
loadVariables("mypage.asp?nocache=" + random(65000), 0, "POST";
方法二:
loadVariables("mypage.asp?nocache=" + getTimer(), 0, "POST";
这样确保每次加载的数据是最新的.
[补充]
然而在实践中,我取发现在页面含有SWF文件时使用MM提供的方法,有时不是很灵验。
经过不断的测试,我发现使用一下的方法可以百分之百的解决flash读取本地缓存的问题
首先我们来看看页面中包含flash文件的代码:
<object classid="clsid27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="550" height="400" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="waizi.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="waizi.swf" quality="high" bgcolor="#ffffff" width="550" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
其红色的部分就是代表你要调用的flash 资源。我们可以简单的在其后附加一个变量就可以强制页面每次都从服务器端调用最新的SWF文件。
例如:xxxx.swf?rand=12334567
方法一: 如果是HTML页面,其不能自动改变变量的值,所以当你的SWF文件修改后上传服务器,你只要手工修改rand变量后面的数值就可以防止页面读取本地的SWF文件信息。
方法二: 如果你的页面是asp,php动态页面,则可以通过脚本来实现其动态修改变量值。
例如在asp页面中,使用vbscript产生一个随机数
<%
dim num
Randomize
num=Int((1000000*Rnd)+1)
%>
然后在你那一堆置入SWF文件的代码中,找到SWF文件名,并修改其为:
<param name=movie value="****.swf?rand=<%=num%>">
embed src="****.swf?rand=<%=num%>"
记住是两个地方,因为其适用于不同的浏览器。
如果使用javascript可以这样:
<script language="JavaScript">
function Rand(){
var Num=Math.floor(Math.random()*1000000);
document.write(Num);
}
</script>
然后在调用flash代码的地方修改为:
****.swf?rand=<script language="JavaScript">getRand();</script>
记得是一般要改两个地方。一个<object>用于IE的 一个<embed>用于非IE浏览器的
现在想想有了问题,第一个寻找答案的地方就是去adobe网站上查询。