2011-08-17 37 views
1

我正在使用Douglas Crockford的JavaScript解析庫來解析一些AJAX請求響應到一個js腳本,我正在運行在一箇舊的嵌入式設備上,該設備的開發以Opera 8.5支持結束Presto 1.0渲染引擎,Linear B)。在Opera 8.5中未定義的JSON(json2.js)變量

我試過通過腳本標記「src」屬性導入腳本,並在腳本標記之間逐字插入腳本。然而,只要引用JSON對象,我就會得到一個讀取「引用未定義變量:JSON」的異常。

我測試了不相交的腳本中的全局變量,似乎工作正常。

這是奇怪的考慮json2.js的第一行寫着:

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

它在Opera9,使用相同的JavaScript引擎正常工作,所以我徹底難倒。

我也測試過,看看符號是否有效(是),腳本只是不想被包括在內,放置在文本中任何位置的儀器都不會被調用。

有什麼建議嗎?

編輯:

我剛剛串接所有的腳本一起到腳本標記之間的單一來源,它仍然無法加載,包括無法加載它後面所有的JavaScript。它必須是某種解析錯誤。

EDIT2:

下載Opera 8.5在這裏

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

+0

我修復了它。這是一個解析問題。原來,它不支持正則表達式對象的簡寫。 – mrehayden 2011-08-17 13:50:50

回答

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 ,firef牛,我不知道歌劇)本機支持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); 
} 
+0

「一些瀏覽器(Chrome,Firefox,我不知道歌劇)本機支持JSON」我從來不知道。 – mrehayden 2011-08-17 11:58:36