这个问题has been asked before但是1)用户从未接受过答案2)他们中没有一个比其他人更好(投票方式)和3)提问者似乎已经忘记了它。所以我要再问一遍,这样我才能得到一个公认的答案。并且该线程中的一些用户表示某些解决方案不起作用。很抱歉让这个地方变得杂乱无章,但我保证会深究这一点。
有一天,当我在Firefox中查看我的Silverlight应用程序时,我遇到了这个问题。我对图像的位置进行了更改,但没有移动。我以为我做错了,但后来我看了IE7,图像在正确的位置。原来Firefox正在显示该文件的缓存版本;我所做的改变没有显现出来。
这是一个更大的问题:如果我更改我的应用程序(让我们说这是一个紧急的拼写错误更正),我如何强制最终用户查看我的Silverlight应用程序的最新版本? isolated storage (Heuer's blog)真的是从服务器端强制更新的唯一方法吗?清除Firefox缓存不适用于推送更新;我需要在没有最终用户做任何事情的情况下传播更新。
更新:Dino Esposito有一些关于控制它的想法,特别是使用Response对象的Expires属性。还没有机会尝试这个。
答案 0 :(得分:2)
您可以对文件名中的版本号或时间戳进行编码吗?这样,如果页面发生变化,Firefox会注意到它指向一个完全不同的资源并重新加载它。
答案 1 :(得分:1)
首先,您需要在每次布局或代码更改后构建应用程序。 Silverlight不是HTML,它是在本地运行的代码。
其次,实际解决方案:
page.xaml
加载,启动位于基础页面上的Web服务的异步如果是Firefox,请告知响应它会立即过期
[OperationContract]
public bool DetectFirefox()
{
if ((HttpContext.Current.Request.Browser.Browser == "Firefox") &&
((HttpContext.Current.Request.Browser.MajorVersion >= 2)))
{
HttpContext.Current.Response.Expires = -1;
}
return true;
}
这里唯一需要注意的是,您需要在希望它启动之前添加该代码。否则,FF3将运行没有响应到期的旧版本代码。