2012-01-20 49 views
2

我將Date對象傳遞給調用date.getHours()或任何其他方法(如date.getFullYear())的方法,並且它會引發錯誤"Can't execute code from a freed script"。看來,IE9不能正確支持日期選擇器使用的日期對象。當在IE9中調用date.getHours()時,「無法從釋放的腳本執行代碼」

我是新來的JavaScript /通用編碼,並有問題,似乎只發生在IE9。我警告這個大家因爲我去了關於完全錯誤的方式解決它......

我試着在試圖解決這一問題的各種不同的東西,如:

if (date.getHours()=="undefined") { 
    var localDate = new Date(date); 
    var hours = localDate.getHours(); 
    // etc 
} 

我現在有一個解決方案(它可能不是最好的,但它的工作),並會在下面發佈,但我想知道是否有其他人遇到同樣的問題,以及他們如何解決它?

+0

你讀過http://stackoverflow.com/questions/83132/what-c​​auses-the-error-cant-execute-code-from-a-freed-script? – user123444555621

回答

3

根據我的經驗,當你得到的Date對象是在不同的窗口中構造的時候,問題就會發生,因爲它的構造是其他窗口已經關閉或者重新加載了一個新頁面。

解決方法是以某種字符串形式發送對象窗口,在目標上下文中根據需要重新組合它們。

(這當然不是隻是日期的實例,它是任何對象類型基元沒有問題,如果我還記得。)

+0

謝謝Pointy,這解釋了很多!我不能發佈我的解決方案,因爲我是一個新用戶,所以必須等待8個小時,但是我在一個新方法中使用了try catch塊,該方法試圖調用date.gethours(),然後我完成了它;我使用傳入的日期重建了一個新的Date對象。這意味着我不必擔心用戶正在使用哪個瀏覽器。這是實施解決方案的正確方法嗎? –

+0

當然,這將工作。或者您可以在原始日期中調用'.getTime()'並使用它在接收窗口上下文中構造一個新的日期。 – Pointy

0

我的解決辦法如下......

我創建了一個新方法:

date = getValidDate(date); 

function getValidDate(date) { 
    try { 
     date.getHours(); 
     return date; 
    } catch (e) { 
     return new Date(date); 
    } 
} 

我那麼這是受原問題的任何方法稱爲

這是如同尖銳的描述,我剛剛返回了一個新的日期,由已傳入該方法的原始日期填充。然後我可以在這個新的日期調用任何方法,如getHours(),getFullYear()等。

我是編程界的新手,雖然這看起來很簡單,但如果他們處於類似的情況,我希望這對他人有幫助。

相關問題