【问题标题】:JSON (json2.js) variable undefined in Opera 8.5Opera 8.5 中未定义的 JSON (json2.js) 变量
【发布时间】:2011-08-17 10:57:58
【问题描述】:

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

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

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

考虑到 json2.js 的第一行,这很奇怪:

var JSON;
if(!JSON) {
  JSON = {};

它在 Opera9 中运行良好,它使用相同的 javascript 引擎,所以我完全被难住了。

我还测试了符号是否有效(是),脚本只是不想被包括在内,放置在文本中任何位置的工具都不会被调用。

有什么建议吗?

编辑:

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

编辑2:

在此处下载 Opera 8.5

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

【问题讨论】:

  • 我已经修好了。这是一个解析问题。原来它不支持正则表达式对象的简写。

标签: javascript json opera


【解决方案1】:

对您的第一个问题添加了 cmets

// 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”我从来不知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
  • 2018-03-01
  • 1970-01-01
相关资源
最近更新 更多