【转】解决Silverlight3部署的时候实际上反复下载2.0甚至是IE8

以下是节选内容:
这个惯例在最新的Silverlight3中得到了延续,并且升华到了毁灭性的程度,什么叫毁灭性?请看下面几个例子:

1 在IE6的环境下,如果没有安装过Silverlight,而被要求提示安装,并且跳转到http://go.microsoft.com/fwlink/?LinkID=143433的时候, 可以正常安装3.0

2  在IE6的环境下,如果已经安装过Silverlight2.0,要求提示安装3.0时,跳转到http://go.microsoft.com/fwlink/?LinkID=143433的时候,会实际下载2.0,然后下次继续这样 无限反复

3  在IE7的环境下,如果没有安装过Silverlight,而被要求提示安装,并且跳转到http://go.microsoft.com/fwlink/?LinkID=143433的时候, 可以正常安装3.0

4  在IE7的环境下,如果已经安装过Silverlight2.0,会弹出两个对话框,都是提示现有Silverlight已经过期,要求升级,点击任何一个之后,都是跳转到http://go.microsoft.com/fwlink/?LinkID=143433的时候,会实际下载2.0,然后下次继续这样 无限反复

5  IE8的情况和第4点一样,但是恶化得更厉害:两个对话框点击任何一个都会出现 “窗口无响应”的错误提示,然后 直接假死。 

6  chrome的情况和IE8一样,很 恶劣。 

7  firefox的情况和IE7一样,同样比较 恶劣。 



以上的几点测试环境说明:  IE8是WINDOWS7自带的,属于IE8正式版,chrome也安装于Windows7。  IE6和IE7、Firefox是XP和WINDOWS2008R1中的。vista就不测试了,情况绝对是一样。(我的主系统是Windows7,XP和2008是虚拟机中的,因为牵扯到需要至少重启10多次虚拟机、不花费半天搞不完的情况, 所以我就不截图了。)

虽然产品宣传策略上我对微软是抱有很大的意见,但是silverlight3实在是太好,比起2.0,简直一个天一个地,不用不行,所以还是老办法,自己宣传.netframework,自己宣传Silverlight。


研究了两天,发现罪魁祸首是silverlight2.0自作聪明,自己弹出个不着边的对话框。并且会截断我们在OBJECT中自己定义的3.0下载地址。所以,我们只能预先检测silverlight运行时,通过javascript来判断该怎么加载。 以下是我自己搞出来的偏方,可以解决浏览器假死和反复下载问题,其原理就是让2.0根本就没有机会运行:

首先我们需要加载 Silverlight.js 这个文件,可以自己VS2008和blend中去找,也可以从 这里下载

然后,直接在window.onload事件中调用我的这个函数:<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
    
function  checkLight() {
    

            
var  light_main  =   document.getElementById( " light_main " ); //  放置silverlight对象的div的id

            
var  light  =  Silverlight.isInstalled( " 3.0 " );

            if (light) {  

 

  light_main.innerHTML =

                '<object data="data:application/x-silverlight," type="application/x-silverlight" width="428" height="148">' +

       '<param name="source" value="http://files.cnblogs.com/kvspas/test_light.xap"/>' +

       '<param name="onerror" value="onSilverlightError" />' +

       '<param name="background" value="black" />' +

       '</object>';

            }
            
else  {

                light_main.innerHTML 
=   " <a href=/ " http: // go.microsoft.com/fwlink/?LinkID=143433/" target=/"_blank/"><img src=/"自己弄个合适你网站的备用图片/" alt=/"正确运行本站程序需要Silverlight3.0或更高版本/" /></a>";
                 // 尚未具备3.0运行时
            }    

}


 下面是根据以上代码做的测试(如果没有安装silverlight3,会看到一幅图片说你没安装,点击后可以正常下载3.0,不会反复重装,更不会假死,否则应该有一个silverlight3动画):   

正确运行本站程序需要Silverlight3.0或更高版本

 

ADOBE自动升级FLASH,不会被告垄断,ORACLE自动升级JAVA,也不会被搞告垄断,微软自动升级.NET和Silverlight如果被那些流氓联盟控告的话,鲍先生,您完全可以买两架波音777以“不友好的方式“降落到白宫和欧洲议会,然后把微软总部迁移到我们中国来,以您的性格,我相信您做得到的。 毕竟没有任何一位微软技术开发者愿意看到windows7时代为了部署.net 4.5和silverlight4.0,windows8时代为了部署.net6.0和silverlght8.0而伤脑筋。难道想让我们为.net而做流氓插件自动下载?开发者因此而流失到苹果、谷歌、IBM、ORACLE那边的话,微软也是不愿意看到的,何苦呢?

 

半夜4点发贴,难免代码会有错误,如果有BUG,明天我会解决。

 

顺便说句后话:写这篇文章的时候,WINDOWS7RC正好发布,就在我准备提交这篇文章时,因为迅雷下载得太厉害,把系统搞蓝屏了,幸好中途备份!幸好中途备份!同时也建议博客园开发团队做个自动实时保存的功能,技术文章一般都比较长,遇到类似我这种中途蓝屏的情况,不会有人愿意再重新写的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值