`
61party
  • 浏览: 1054473 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

IE8如何使用原生JSON对象?

阅读更多

在以前的文章里,我介绍了IE8支持原生的JSON对象,但是,在使用的时候,还需要注意一些问题。很多人使用下面的代码测试,就会报告说JSON未定义:

HTML 代码
<!-- <br/> <br/> Code highlighting produced by Actipro CodeHighlighter (freeware)<br/> http://www.CodeHighlighter.com/<br/> <br/> -->< html >
< body >
< script type ="text/javascript" >
alert(
typeof JSON);
</ script >
</ body >
</ html >

既然IE8支持了JSON对象,那怎么还不能使用呢?原来,在IE8中使用原生JSON对象是有条件的。微软在介绍JSON对象时也有下面的一段注释:

Starting with JScript 5.8, by default, the JScript scripting engine supports the language feature set as it existed in version 5.7. This is to maintain compatibility with the earlier versions of the engine. To use the complete language feature set of version 5.8, the Windows Script interface host has to invoke IActiveScriptProperty::SetProperty.

Internet Explorer 8 opts into the JScript 5.8 language features when the document mode for Internet Explorer 8 is "Internet Explorer 8 Standards" mode. For other document modes, Internet Explorer uses the version 5.7 feature set.

JScript 5.8 includes native JavaScript Object Notation (JSON) support and the accessor methods for Document Object Model (DOM) prototypes.

由于JSON对象是在JScript 5.8及其以后的版本引入的,所以,默认情况下,IE8使用的是JScript 5.7版本,所以,原生JSON对象是无法使用的。那么,如何使用IE8的原生对象呢?
IE8为了最大限度地保证浏览器的向后兼容性,使原先创建的网页能够正常显示,默认采用的是IE7的渲染引擎,同时,IE8支持多种文档兼容性模式。具体来说有:

  • “模仿 IE8”模式将告诉 Internet Explorer 使用 <!DOCTYPE> 指令来确定如何呈现内容。 标准模式指令将以 Internet Explorer 8 标准模式显示,而 Quirks 模式指令将以 IE5 模式显示。 与 IE8 模式不同,“模仿 IE8”模式遵循 <!DOCTYPE> 指令。
  • “模仿 IE7”模式将告诉 Internet Explorer 使用 <!DOCTYPE> 指令来确定如何呈现内容。 标准模式指令以 Internet Explorer 7 标准模式显示,而 Quirks 模式指令以 IE5 模式显示。 与 IE7 模式不同,“模仿 IE7 模式”遵循 <!DOCTYPE> 指令。 对于很多网站来说,这是首选的兼容性模式。
  • IE5 模式呈现内容的方式如同使用了 Internet Explorer 7 的 Quirks 模式来显示内容,这与 Internet Explorer 5 显示内容的方式非常相似。
  • IE7 模式:无论页面是否包含 <!DOCTYPE> 指令,IE7 模式呈现内容的方式均如同使用了 Internet Explorer 7 的标准模式来显示内容。
  • IE8 模式可最大程度地支持行业标准(包括 W3C 级联样式表级别 2.1 规范 和 W3C 选择器 API),并提供对 W3C 级联样式表级别 3 规范(工作草案) 的有限支持。
  • Edge 模式将告诉 Internet Explorer 以可用的最高级别模式显示内容。 对于 Internet Explorer 8,这等同于 IE8 模式。 假设 Internet Explorer 的将来版本支持更高级别的兼容性模式,那么,设置为 Edge 模式的页面将以该版本支持的最高级别的模式显示。 当使用 Internet Explorer 8 查看时,这些相同的页面仍会以 IE8 模式显示。

详细介绍可以参见MSDN文档:定义文档兼容性(http://msdn.microsoft.com/zh-cn/library/cc288325(VS.85).aspx)。

注意:X-UA-compatible 标头不区分大小写;不过,它必须显示在网页中除 title 元素和其他 meta 元素以外的所有其他元素之前的标头中

所以,要使用IE8的原生JSON对象,可以采取下面几种方法:

方法1:定义<!DOCTYPE>

XML/XHTML 代码
<!-- <br/> <br/> Code highlighting produced by Actipro CodeHighlighter (freeware)<br/> http://www.CodeHighlighter.com/<br/> <br/> --><! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< title > 孟宪会:JSON测试 </ title >
</ head >
< body >
< script type ="text/javascript" >
alert(typeof JSON);
</ script >
</ body >
</ html >

方法2:设置X-UA-compatible 标头

XML/XHTML 代码
<!-- <br/> <br/> Code highlighting produced by Actipro CodeHighlighter (freeware)<br/> http://www.CodeHighlighter.com/<br/> <br/> -->< html >
< head >
< meta http-equiv ="X-UA-Compatible" content ="IE=edge" >
< title > 孟宪会:JSON测试 </ title >
</ head >
< body >
< script type ="text/javascript" >
alert(typeof JSON);
</ script >
</ body >
</ html >
或者
< html >
< head >
< meta http-equiv ="X-UA-Compatible" content ="IE=8" >
< title > 孟宪会:JSON测试 </ title >
</ head >
< body >
< script type ="text/javascript" >
alert(typeof JSON);
</ script >
</ body >
</ html >

在实际编程程序的时候,最好的办法是进行判断,如果不支持原生的JSON,那么就是要json2.js提供的对象即可。

分享到:
评论

相关推荐

    IE8 原生JSON支持

    这种新的原生JSON功能能够使Internet Explorer 8对现有的AJAX应用程序运行得更加快速和安全。什么是JSON?大多数开发者不是只进行AJAX程序程序开发的,我这里先介绍一点背景知识。JSON是一种简单的、人能够阅读的...

    json对象转字符串如何实现

    背景:大部分浏览器已经实现了json对象转字符串的原生api支持,那在较低版本浏览器浏览器——如大家最喜爱的IE6——里如何实现呢? 首先运行以下方法,测试各种情况下,JSON.stringify的输出,这有助于下文代码的...

    JavaScript 解析Json字符串的性能比较分析代码

    解析时用到的方法一般是eval或者new function,而目前IE8和Firefox3.1又内置了原生的JSON对象(据说会有一定的性能提升)。那我们在实际使用的时候怎样从这三种方法(因为性能问题,不考虑用javascript实现的解析)...

    Chrome中JSON.parse的特殊实现

    如果给Object.prototype添加一个解析json的方法(某人可能会强烈反对这么干污染了原生对象,这里纯粹为了讨论) 代码如下: Object.prototype.parseJSON = function () { return JSON.parse(this)

    原生JS封装Ajax插件(同域、jsonp跨域)

    Ajax技术的核心是XMLHttpRequest对象(简称XHR),IE5是第一款引入XHR对象的浏览器,而IE5中的XHR对象是通过MSXML库中的一个ActiveX对象实现的,因此在IE中可能有3个版本,即MSXML2.XMLHttp、MSXML2.XMLHttp.3.0和...

    原生js jquery ajax请求以及jsonp的调用方法

    ajax 是用来处理前后端交互的技术,可以改善用户体验,其本质是 XMLHttpRequest,异步访问服务器并发送请求数据,服务器...主流浏览器获取方式:火狐、谷歌、safari、opera、IE7以上 var xhr = new XMLHttpRequest();

    精通AngularJS part1

    使原生浏览器校验无效157 56在其他表单中嵌套表单157 将子表单作为可重用组件157 57重复子表单158 验证重复输入159 58处理传统的HTML表单提交161 直接向服务器提交表单161 处理表单提交事件161 使用ngSubmit...

    超实用的jQuery代码段

    7.8 获取图片原生尺寸的方法 7.9 检查图像是否已经被完全加载 7.10 单击改变背景图案 7.11 如何显示Flickr网站的图片 7.12 如何显示Google Picasaweb的图片 7.13 按比例调整图片的大小 7.14 滑动效果的背景图片 7.15...

    ExtAspNet_v2.3.2_dll

    -实际上IE7下所以的回发都慢,原因是客户端的Base64编码速度慢,已经使用encodeURIComponent来代替Base64编码。 -俄语翻译(feedback:vbelyaev)。 +2010-06-30 v2.3.1 -ExtAspNet控件将不在依赖ViewState,...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。 示例: http://extasp.net/ 开源: http://extaspnet.codeplex.com/ 博客: http://sanshi.cnblogs.com/ 邮箱: sanshi.ustc@gmail...

Global site tag (gtag.js) - Google Analytics