强制Firefox获取Silverlight应用程序的最新版本

4
这个问题以前已经被问过, 但是1) 用户从来没有接受一个答案,2) 没有一个答案比其他答案更好(根据投票),3) 提问者似乎忘记了它。所以我要再次提问,以便得到一个被接受的答案。帖子中的一些用户说,一些解决方案不起作用。抱歉让地方混乱,但我保证会找到问题的根源。
前几天我在Firefox中查看我的Silverlight应用程序时遇到了这个问题。我更改了图像的位置,但它没有移动。我以为我做错了,但然后我看了IE7,图像就在正确的位置上。结果发现Firefox正在显示缓存版本的文件;我所做的更改没有显示出来。
这是一个更大的问题:如果我改变我的应用程序(比如说,紧急修正一个错别字),我如何强制终端用户看到最新版本的Silverlight应用程序?独立存储(Heuer's blog)真的是从服务器端强制更新的唯一途径吗?清除Firefox缓存对于推送更新来说行不通;我需要更新在终端用户不做任何操作的情况下自动传播。
更新:Dino Esposito有一些关于控制此问题的想法,具体使用Response对象的Expires属性。还没有机会尝试这个方法。
2个回答

2
你能否在文件名中编码版本号或时间戳?这样,如果页面更改,Firefox 将注意到它指向完全不同的资源,并重新加载它。

这个答案是另一个问题的答案之一,可能是最好的解决方案。如果您更改URL,则浏览器别无选择,只能下载新应用程序。 - Kibbee

1
首先,在每次布局或代码更改后,您需要构建应用程序。Silverlight不是HTML,它是在本地运行的代码。
其次,解决此问题的实际方法是:
  1. page.xaml 加载,启动了一个在底层页面上的网络服务的异步操作
  2. 网络服务检测到Firefox浏览器
  3. 如果是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将运行旧版本的代码,而没有响应过期。

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