2013-04-08 55 views
0

SCRIPT438工作:對象不支持我收到此錯誤屬性或方法「鍵」Object.keys(......)並不總是在IE

使用IE 9.0.8112.16421,但並非總是如此。兩種環境中的應用程序和代碼完全相同。一臺在Intranet主機上運行JBoss,另一臺在本地主機上運行Jetty。前者給出錯誤。

這是它失敗的代碼:

return $.get('/rest/typeaheads/' + query, function(data) { 
    lastResults = data; 
> return process(Object.keys(lastResults)); < 
}); 

我已經得到了通過AJAX調用收到JSON對象映射lastResults。我明白,Object.keys(...)不適用於主機對象,但我的json對象肯定不是主機對象?

那麼這怎麼可能發生,爲什麼兩種環境之間的區別呢?

+0

這可能與IE9的安全設置有關,這些設置對於internet/intranet/local區域不同。您可以使用這裏建議的解決方法:http://stackoverflow.com/questions/13723805/ie-issue-object-keysvalue-length-not-supported – 2013-04-08 08:16:35

回答

0

顯然; IE 9將在Intranet環境中假定您的所有Intranet應用程序都是廢話。因此它將進入「兼容模式」。在「兼容模式」下,它將模擬IE 7.

我對此的解決方案是添加一條警告,提醒用戶關於此問題並提供關閉「兼容模式」的說明。

此外,這對我來說不再是一個問題,我應該我需要支持IE7。我已經開始使用提供它自己的函數來檢索密鑰的下劃線庫。

0

你可以嘗試滾動自己:

Object.keys = Object.keys || function keys(obj) { 
    var ret = []; 
    for (var prop in obj) if (obj.hasOwnProperty(prop)) ret.push(prop) 
    return ret; 
}