修复ASP.NET AJAX 在IE6下出现Sys未定义的错误

本文探讨了一个网站在IE6浏览器中出现的'Sys'未定义错误问题。通过调试和网络监听工具发现该问题是由于字符编码不一致导致的。提出了两种解决方案:一是更改web.config中的字符编码为UTF-8;二是禁用ScriptManager的本地化支持。

昨天碰到个“有趣”的问题:一个网站在IE7和FF下没有任何脚本错误,但是IE6打开时会出现脚本错误,点击左下脚的脚本错误提示可以看到信息'Sys'未定义,排除了缓存造成的问题。一时间还真不知道是怎么回事,ASP.NET AJAX Freamwork里面的JS库不至于没有在IE6下测试吧?!通过Fiddler侦听IE6的请求,所有脚本都正确下载,并没有看到有404错误。那么到底是怎么回事呢?对于我来说,IE6已经是老古董级别的浏览器了,已经很久没有用过它,但是还是有一些人不肯更新到IE7以上的浏览器——说实话不知道他们是怎么想的?可能很多人是用Maxthon、腾讯浏览器等等以IE为核心的第三方包装过的浏览器。这些浏览器很可能没有提示用户更新他们的IE浏览器到新的版本。对于喜欢使用WEB标准来开发网页的开发人员来说,IE6是个噩梦,很不符合标准、bug多。我只能在一个2003的虚拟机里面使用IE6,虚拟机里面并没有合适的调试JS工具。虽然如此,我还是开启了IE6的脚本调试功能,发现刷新网页是IE6有提示“异常的字符串结尾”。

在网上搜了一把,发现博客园里面有个人提示同样的问题,他的解决方案是去掉web.config里面的<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" uiCulture="zh-CN"/>,试了下确实可行。我通过Fiddler侦听的结果发现下载的AJAX核心脚本文件的最后部分有中文字符串,看来真是字符编码引起的问题。同时想起ScriptManager有两个属性是有关本地化支持,这两个属性默认应该是开启的,于是Freamwork根据浏览器的区域设置在JS结尾部分加入了中文字符串——当然是为了更好显示提示信息。但是很可惜,这些中文字符串在IE6里面会变成乱码,从而导致Sys未能正确初始化。

于是针对IE6的这个问题可能有两个解决方法,第一:使用UTF8编码,也就是去掉web.config里面定义的gb2312编码指示。第二:关闭ScriptManager的本地化支持,貌似很多时候我们也不需要那些字符串资源。即设置属性<asp:ScriptManager ID="scripts" runat="server" EnableScriptGlobalization="false" EnableScriptLocalization="false">。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值