强制firefox获取最新版本的silverlight app

时间:2009-03-01 18:25:13

标签: silverlight firefox

这个问题has been asked before但是1)用户从未接受过答案2)他们中没有一个比其他人更好(投票方式)和3)提问者似乎已经忘记了它。所以我要再问一遍,这样我才能得到一个公认的答案。并且该线程中的一些用户表示某些解决方案不起作用。很抱歉让这个地方变得杂乱无章,但我保证会深究这一点。

有一天,当我在Firefox中查看我的Silverlight应用程序时,我遇到了这个问题。我对图像的位置进行了更改,但没有移动。我以为我做错了,但后来我看了IE7,图像在正确的位置。原来Firefox正在显示该文件的缓存版本;我所做的改变没有显现出来。

这是一个更大的问题:如果我更改我的应用程序(让我们说这是一个紧急的拼写错误更正),我如何强制最终用户查看我的Silverlight应用程序的最新版本? isolated storage (Heuer's blog)真的是从服务器端强制更新的唯一方法吗?清除Firefox缓存不适用于推送更新;我需要在没有最终用户做任何事情的情况下传播更新。

更新:Dino Esposito有一些关于控制它的想法,特别是使用Response对象的Expires属性。还没有机会尝试这个。

2 个答案:

答案 0 :(得分:2)

您可以对文件名中的版本号或时间戳进行编码吗?这样,如果页面发生变化,Firefox会注意到它指向一个完全不同的资源并重新加载它。

答案 1 :(得分:1)

首先,您需要在每次布局或代码更改后构建应用程序。 Silverlight不是HTML,它是在本地运行的代码。

其次,实际解决方案:

  1. page.xaml加载,启动位于基础页面上的Web服务的异步
  2. webservice检测到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;
    }
    
  4. 这里唯一需要注意的是,您需要在希望它启动之前添加该代码。否则,FF3将运行没有响应到期的旧版本代码。