网上都说IE8原生支持JSON对象,Opera也说它支持,但为什么测试时为什么报JSON未定义?

love2java 2010-01-06 11:13:36
如题!

测试代码很简单:

<script type="text/javascript">
alert(JSON);
</script>


不知是我忽略了什么,望各位指点下,谢谢!
...全文
2674 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
地狱羔羊 2010-07-09
  • 打赏
  • 举报
回复
因为你页面里加了<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
kslion 2010-01-07
  • 打赏
  • 举报
回复
据测,Firefox3。5、IE8、Chrome3.0.195.38三个浏览器已内置JSON对象,而Opera最新版本10.10还不支持。
love2java 2010-01-07
  • 打赏
  • 举报
回复
to # cuixiping # (愚公)

我当然不是想做个只兼容IE8的网页。我有提到过一直都是用的json2.js,它里面已经就是否有JSON对象进行检测:
if (!this.JSON) {
this.JSON = {};
}
但在RC版本的IE8中,如果一个对象的属性值是空串的话,通过stringify方法转换后会把""空串变为"null"。这个应该是RC版本的bug,在正式IE8版本中,我测试发现没有这个问题了。
孟子E章 2010-01-07
  • 打赏
  • 举报
回复
firefox,chrome已经支持了,safari也应该是支持的,使用原生 JSON也不是不可以了。最好是检测下是否支持
cuixiping 2010-01-07
  • 打赏
  • 举报
回复
对象检测是王道。
对象检测无法做到的,才考虑浏览器检测。
既然许多浏览器版本不支持JSON,那么就需要检测,也就是typeof
楼主你不会是想做个只兼容IE8的网页来吧?
孟子E章 2010-01-06
  • 打赏
  • 举报
回复
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<body>
<script type="text/javascript">
alert(typeof JSON)
</script>
</body>
</html>

或者

<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<body>
<script type="text/javascript">
alert(typeof JSON)
</script>
</body>
</html>

才可以使用
qq373591361 2010-01-06
  • 打赏
  • 举报
回复
jf
love2java 2010-01-06
  • 打赏
  • 举报
回复
to wcwtitxu # (君当如狼)

将浏览器模式和文本模式都调整为IE8模式,能够alert(JSON)对象出来,不会报对象不存在。但我的问题就来了,如果我一定要在“开发者工具”里面作这样的调整才能有该对象出来,那有何实际意义?因为普通用户都是使用默认安装的IE8,他不会去改这些设置,也不应该让用户去修改设置。

而且我关掉IE8后,再打开IE8测试页面,仍然会报JSON不存在,也就是说在“开发者工具”里面作的修改只会对当前页面有效,它不会改变浏览器的全局设置。

如果这样,我们现在敢用这个原生的JSON对象么?
wcwtitxu 2010-01-06
  • 打赏
  • 举报
回复
按 F12

然后在 浏览器模式, 文本模式那里, 郁乱摆弄一下就知道了
love2java 2010-01-06
  • 打赏
  • 举报
回复
to wcwtitxu # (君当如狼)

本地的静态页面,如何确定是否使用了兼容模式?还有不知你的测试结果如何。

我发这个贴,是因为IE8说支持原生JSON,也就是可以直接使用JSON这个对象,在rc版本的IE8是能得到的,但我正式IE8中得不到这个对象,我不知究竟哪里有问题,麻烦XDJM也测试下。
王集鹄 2010-01-06
  • 打赏
  • 举报
回复
/*
Copyright (c) 2005 JSON.org

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The Software shall be used for Good, not Evil.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

/*
The global object JSON contains two methods.

JSON.stringify(value) takes a JavaScript value and produces a JSON text.
The value must not be cyclical.

JSON.parse(text) takes a JSON text and produces a JavaScript value. It will
return false if there is an error.
*/
var JSON = function () {
var m = {
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
},
s = {
'boolean': function (x) {
return String(x);
},
number: function (x) {
return isFinite(x) ? String(x) : 'null';
},
string: function (x) {
if (/["\\\x00-\x1f]/.test(x)) {
x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
var c = m[b];
if (c) {
return c;
}
c = b.charCodeAt();
return '\\u00' +
Math.floor(c / 16).toString(16) +
(c % 16).toString(16);
});
}
return '"' + x + '"';
},
object: function (x) {
if (x) {
var a = [], b, f, i, l, v;
if (x instanceof Array) {
a[0] = '[';
l = x.length;
for (i = 0; i < l; i += 1) {
v = x[i];
f = s[typeof v];
if (f) {
v = f(v);
if (typeof v == 'string') {
if (b) {
a[a.length] = ',';
}
a[a.length] = v;
b = true;
}
}
}
a[a.length] = ']';
} else if (x instanceof Object) {
a[0] = '{';
for (i in x) {
v = x[i];
f = s[typeof v];
if (f) {
v = f(v);
if (typeof v == 'string') {
if (b) {
a[a.length] = ',';
}
a.push(s.string(i), ':', v);
b = true;
}
}
}
a[a.length] = '}';
} else {
return;
}
return a.join('');
}
return 'null';
}
};
return {
copyright: '(c)2005 JSON.org',
license: 'http://www.crockford.com/JSON/license.html',
/*
Stringify a JavaScript value, producing a JSON text.
*/
stringify: function (v) {
var f = s[typeof v];
if (f) {
v = f(v);
if (typeof v == 'string') {
return v;
}
}
return null;
},
/*
Parse a JSON text, producing a JavaScript value.
It returns false if there is a syntax error.
*/
parse: function (text) {
try {
return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
eval('(' + text + ')');
} catch (e) {
return false;
}
}
};
}();
sohighthesky 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wcwtitxu 的回复:]

alert(JSON.stringify(obj));
[/Quote]
btw:stringify这个方法ify是指的啥啊?
love2java 2010-01-06
  • 打赏
  • 举报
回复
下面是最简单的测试代码,各位有正式版本IE8和Opera10。10的可以试下。

<html>
<head>
<script language="JavaScript" type="text/javascript">
//language="JavaScript" 使用language是为了在Opera中alert有效
alert(navigator.userAgent)
alert(JSON);
</script>
</head>
<body>
</body>
</html>
wcwtitxu 2010-01-06
  • 打赏
  • 举报
回复
把浏览器调到 IE8 标准模式,
自己试一下就知道咯

var obj = {
'num':123
, 'str': 'abcde?>>"\'!@$@#%&\r\n中文ft'
, 'dat': new Date()
, 'reg': new RegExp('abc')
, ary:[1,2,3, 4,5,6]
, 'NaN': NaN
, 'null': null
, 'undefined':undefined
};
alert(JSON.stringify(obj));
love2java 2010-01-06
  • 打赏
  • 举报
回复
我在Opera10。10上测试也还不支持
sohighthesky 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 love2java 的回复:]
对于本地静态页面来说,它是不存在兼容模式的吧,我检查了兼容性视图设置,本地不在列表之内的。
[/Quote]
你用什么打开的,输出navigator.userAgent看看是不是ie8
love2java 2010-01-06
  • 打赏
  • 举报
回复
我其他同事使用RC版本的IE8,在这些版本上是能正常alert出来的;但正式版本的就不行。
王集鹄 2010-01-06
  • 打赏
  • 举报
回复

<script type="text/javascript">
alert(接分);
</script>
sohighthesky 2010-01-06
  • 打赏
  • 举报
回复
opera10.01目前好像不支持吧



[Quote=引用 2 楼 soundtbugle 的回复:]
哪它自动生成的json都些什么内容呀
[/Quote]https://developer.mozilla.org/En/Using_native_JSON
love2java 2010-01-06
  • 打赏
  • 举报
回复
对于本地静态页面来说,它是不存在兼容模式的吧,我检查了兼容性视图设置,本地不在列表之内的。
加载更多回复(5)
基于Extjs的开源控件库ExtAspNet英文版 v3.1.9,ExtAspNet - 基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。 ExtAspNet 是为了创建没有 JavaScript,没有 CSS,没有 UpdatePanel,没有 ViewState,没有 WebServices 的网站应用程序。 支持的浏览器: IE 7.0+、Firefox 3.6+、Chrome 3.0+、Opera 10.5+、Safari 3.0+ 授权协议:Apache License 2.0 (Apache) ExtAspNet 是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果。目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 注:ExtAspNet 基于一些开源程序,比如ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor. +2012-08-18 v3.1.9 -修正other/addtab.aspx示例的JS错误和BoundField使用Tooltip的错误(Dennis_Liu)。 +修正Window的GetShowReference返回的字符串中包含双引号的问题(︶ㄣ東東ㄣ、天蓝若空、李剑飞、克儿~)。 -虽然返回的JavaScript语句没问题,但是如果放到HTML属性中就有问题了。 -修正HtmlNodeBuilder在处理双引号等字符可能导致潜在JavaScript问题。 -从根本上解决WindowField、LinkButton、HyperLink等控件的客户端脚本中存在单引号或者双引号出现的各种问题。 -增加动态创建模板列示例grid/griddynamiccolumns2.aspx(大鸟打小鸟)。 -修正按钮的Type设为Reset无效的问题,注意重置的其实是页面上所有的表单控件(e先生)。 -修正英文下确认对话框标题依然默认中文的问题。 -修正后台对可为空的int,short,double属性赋值出现的异常(石头鱼)。 +为Window控件增加GetMaximizeReference和GetRestoreReference两个方法。 -变通的实现打开窗体后最大化:PageContext.RegisterStartupScript(Window2.GetShowReference() + Window2.GetMaximizeReference()); -增加英文示例http://demo.extasp.net/en/。 -更新行布局、列布局和锚点布局示例。 -增加表格导出Excel文件示例。 -增加表格模板列使用单选列表、复选列表的示例。 -完善在线文档http://doc.extasp.net/。 -公开ControlBase的ConvertPropertiesToJObject和RecoverPropertiesFromJObject两个方法。 -兼容Asp.Net的用户控件(UserControl)并增加示例(Spring)。 -更新示例框架,增加手风琴控件和树控件的组合菜单(幻之达)。 -修正自动树节点ID的生成规则,防止页面中多个树控件产生的命名冲突。 -修正表格WindowField生成的脚本可能会出现类似x2未定义的错误(梦如人生)。 -应广大网友的要求,表格的BoundField在启用状态并且提示信息为空的情况下去除标签。 -类似于onReady函数,增加对onInit函数的支持,用来在执行页面初始化脚本之前调用。 -优化复选框列表和单选按钮列表,减少生成的代码量。 -修正CheckBoxList和RadioButtonList无法在回发中更新的BUG(破风、吉吉﹑落叶飞尘)。 -修正CheckBoxList和RadioButtonList初始为空页面不能显示的BUG(e先生、黑眼睛咪咪、宇洋)。 -预祝俺家小师生日快乐!
基于Extjs的开源控件库ExtAspNet中文版 v3.1.9,ExtAspNet - 基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。 ExtAspNet 是为了创建没有 JavaScript,没有 CSS,没有 UpdatePanel,没有 ViewState,没有 WebServices 的网站应用程序。 支持的浏览器: IE 7.0+、Firefox 3.6+、Chrome 3.0+、Opera 10.5+、Safari 3.0+ 授权协议:Apache License 2.0 (Apache) ExtAspNet 是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果。目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 注:ExtAspNet 基于一些开源程序,比如ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor. +2012-08-18 v3.1.9 -修正other/addtab.aspx示例的JS错误和BoundField使用Tooltip的错误(Dennis_Liu)。 +修正Window的GetShowReference返回的字符串中包含双引号的问题(︶ㄣ東東ㄣ、天蓝若空、李剑飞、克儿~)。 -虽然返回的JavaScript语句没问题,但是如果放到HTML属性中就有问题了。 -修正HtmlNodeBuilder在处理双引号等字符可能导致潜在JavaScript问题。 -从根本上解决WindowField、LinkButton、HyperLink等控件的客户端脚本中存在单引号或者双引号出现的各种问题。 -增加动态创建模板列示例grid/griddynamiccolumns2.aspx(大鸟打小鸟)。 -修正按钮的Type设为Reset无效的问题,注意重置的其实是页面上所有的表单控件(e先生)。 -修正英文下确认对话框标题依然默认中文的问题。 -修正后台对可为空的int,short,double属性赋值出现的异常(石头鱼)。 +为Window控件增加GetMaximizeReference和GetRestoreReference两个方法。 -变通的实现打开窗体后最大化:PageContext.RegisterStartupScript(Window2.GetShowReference() + Window2.GetMaximizeReference()); -增加英文示例http://demo.extasp.net/en/。 -更新行布局、列布局和锚点布局示例。 -增加表格导出Excel文件示例。 -增加表格模板列使用单选列表、复选列表的示例。 -完善在线文档http://doc.extasp.net/。 -公开ControlBase的ConvertPropertiesToJObject和RecoverPropertiesFromJObject两个方法。 -兼容Asp.Net的用户控件(UserControl)并增加示例(Spring)。 -更新示例框架,增加手风琴控件和树控件的组合菜单(幻之达)。 -修正自动树节点ID的生成规则,防止页面中多个树控件产生的命名冲突。 -修正表格WindowField生成的脚本可能会出现类似x2未定义的错误(梦如人生)。 -应广大网友的要求,表格的BoundField在启用状态并且提示信息为空的情况下去除标签。 -类似于onReady函数,增加对onInit函数的支持,用来在执行页面初始化脚本之前调用。 -优化复选框列表和单选按钮列表,减少生成的代码量。 -修正CheckBoxList和RadioButtonList无法在回发中更新的BUG(破风、吉吉﹑落叶飞尘)。 -修正CheckBoxList和RadioButtonList初始为空页面不能显示的BUG(e先生、黑眼睛咪咪、宇洋)。 -预祝俺家小师生日快乐!

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧