Javascript Opera 8.5中未定义JSON(json2.js)变量
我正在使用Douglas Crockford的javascript解析库解析一些AJAX请求响应,这些响应是在一个旧的嵌入式设备上运行的js脚本,该设备的开发以支持Opera 8.5(Presto 1.0渲染引擎,Linear B)而告终 我尝试通过脚本标记“src”属性导入脚本,并在脚本标记之间逐字插入脚本。然而,一旦引用了JSON对象,我就会得到一个异常,它显示为“引用未定义的变量:JSON” 我已经在不相交的脚本中测试了全局变量,看起来效果不错 考虑到json2.js的第一行内容,这很奇怪:Javascript Opera 8.5中未定义JSON(json2.js)变量,javascript,json,opera,Javascript,Json,Opera,我正在使用Douglas Crockford的javascript解析库解析一些AJAX请求响应,这些响应是在一个旧的嵌入式设备上运行的js脚本,该设备的开发以支持Opera 8.5(Presto 1.0渲染引擎,Linear B)而告终 我尝试通过脚本标记“src”属性导入脚本,并在脚本标记之间逐字插入脚本。然而,一旦引用了JSON对象,我就会得到一个异常,它显示为“引用未定义的变量:JSON” 我已经在不相交的脚本中测试了全局变量,看起来效果不错 考虑到json2.js的第一行内容,这很奇怪
var JSON;
if(!JSON) {
JSON = {};
它在Opera9中工作得很好,Opera9使用相同的javascript引擎,所以我完全被难住了
我还测试了符号是否有效(是),脚本只是不想包含在内,文本中任何地方的指令插入都不会被调用
有什么建议吗
编辑:
我刚刚将所有脚本连接到脚本标记之间的单个源代码中,但它仍然无法加载,包括未能加载它后面的所有javascript。这一定是某种解析错误
编辑2:
在这里下载Opera 8.5
在您的第一个问题中添加了评论
// delcare a global variable named JSON.Nothing will happen if JSON already declared.
var JSON;
// if JSON not initlized
if(!JSON) {
JSON = {}; // initlize JSON object
}
关于第二个问题
一些浏览器(chrome、firefox,我不知道opera)本机支持JSON,您可以通过下面的代码进行测试和修复
if (!window.JSON) {
//load JSON libaray
head = document.getElementsByTagName("head")[0];
script = document.createElement("script");
script.src = "path/to/json2.js";
script.onload = script.onreadystatechange = function () {
if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") {
head.removeChild(script); //remove the script tag we dynamically created
alert(JSON);
}
}
head.append(script);
}
“一些浏览器(chrome、firefox,我不知道opera)本机支持JSON”,这一点我从来不知道,我已经解决了。这是一个解析问题。事实证明,它不支持正则表达式对象的缩写。