2010-09-23 93 views
0

我通過eval(我知道,拍攝我)運行一些JavaScript,基本上枚舉了文檔對象上的所有屬性。我的問題是,雖然它在螢火蟲中運作,但當從腳本運行時,它會在Firefox中引發未執行的異常。間歇性JavaScript問題

Link to JavaScript script, the exception thrown, and the firebug command working.

任何建議,這是怎麼回事呢?

爲了記錄,這是在Ubuntu 10.04 64位上的Firefox 3.6.10上完成的,chrome沒有這個問題。

+0

爲什麼你需要再次使用eval? – 2010-09-23 17:12:24

+0

一個eval內的eval,我希望你有一個猛禽圍欄。 – MooGoo 2010-09-23 17:30:02

+0

如果只有JavaScript有一個goto語句,我可以扔進... – Michael 2010-09-23 18:12:55

回答

2

的錯誤是在這裏:

console.log(result); 

刪除了這一行,所有應罰款。

console對象是一個Firebug的東西(指的是Firebug控制檯)。 Safari/Chrome恰好也實現了一個console對象(指Webkit js控制檯)。 Firefox,其他瀏覽器的確沒有控制檯對象。所以它會拋出一個錯誤。

順便說一句:像往常一樣,這些傳聞是完全沒有必要的。這是完全等效代碼:

for (key in document) { 
    result[i] = typeof document[key]; 
    result[i+1]="document."+key; 
    i+=2; 
} 

如果你堅持稱它request然後用它作爲參考:

var request = window.document; 
for (key in request) { 
    result[i] = typeof request[key]; 
    result[i+1]=request+"."+key; 
    i+=2; 
} 

如果你堅持用字符串傳遞對象名稱,然後理智的緣故使用eval在一個不易混淆的方式:

var string = "window.document"; 
eval("var request ="+string); 
for (key in request) { 
    result[i] = typeof request[key]; 
    result[i+1]=request+"."+key; 
    i+=2; 
} 

雖然我不會做甚至(有時是必要的,但只有很少)。

+0

eval是必需的,因爲對象名稱正在被字符串傳遞,並且沒有辦法改變它。不過,我可能會轉向最後的建議。但是這並不能解決真正的問題,就好像你看到了例外情況,它在eval線test.js的第53行失敗,而不是console.log行。 – Michael 2010-09-23 18:12:01

+0

Firefox上的eval()調用中的錯誤消息的行號不正確。 – johnjbarton 2010-09-25 18:10:16

+0

您可以禁用Firebug Console面板(面板選項卡上的迷你菜單)。然後重新加載,如果問題是window.console它會發生。另外,如果你有一個字符串'請求',你可以使用(var key在窗口[request]中)。 – johnjbarton 2010-09-25 18:13:03