Opera 8.5中的JSON(json2.js)变量未定义

时间:2011-08-17 10:57:59

标签: javascript json opera

我正在使用Douglas Crockford的javascript解析库来解析一些js脚本的AJAX请求响应我正在一个旧的嵌入式设备上运行,该设备的开发以Opera 8.5支持结束(Presto 1.0渲染引擎,线性B)。

我尝试通过脚本标记“src”属性导入脚本,并在脚本标记之间逐字插入脚本。但是,只要引用JSON对象,我就会得到一个异常,其中显示“引用未定义的变量:JSON”。

我已经在不相交的脚本中测试了全局变量,这似乎工作得很好。

考虑到json2.js的第一行:

,这很奇怪
var JSON;
if(!JSON) {
  JSON = {};

它在Opera9中工作正常,它使用相同的javascript引擎,所以我完全被难倒了。

我还测试了表示符号是否有效(是),脚本只是不想被包含,文本中任何位置的检测都不会被调用。

有什么建议吗?

编辑:

我刚刚将所有脚本连接成脚本标记之间的单个源,但仍无法加载,包括无法加载其后的所有javascript。它必须是某种解析错误。

EDIT2:

在这里下载Opera 8.5

http://arc.opera.com/pub/opera/

1 个答案:

答案 0 :(得分:0)

添加了第一个问题评论

// 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);
}