“不能執(zhí)行已釋放的Script代碼”錯誤的原因及解決辦法
更新時間:2007年09月09日 17:16:37 作者:
很多web開發(fā)者或許都遇到過這樣的問題,程序莫名奇怪出現(xiàn)“不能執(zhí)行已釋放Script的代碼”,錯誤行1,列1.對于這種消息描述不著邊,行列描述更是讓人迷茫的js錯誤,相信是所有調(diào)試js程序的朋友們最郁悶也最憎恨的事情!遇到這種問題,最簡單的辦法直接把錯誤貼到baidu或google那個小輸入框中讓他們先給點指點,再去解決,可這次卻沒有這么容易,在baidu搜索似乎很多人都遇到過這種問題,但是都是些什么qq空間錯誤,狂暈,或者就是只有問沒有答的,悶!
這種錯誤從何調(diào)起?后面沒辦法,又是猜測又是try...catch蹦錯誤,找了半天終于找到錯誤的位置,可是發(fā)現(xiàn)寫的并沒有什么問題,后來絞盡腦汁思考程序的解釋過程,確依舊沒有什么頭緒。繼續(xù)baidu,突然在某網(wǎng)頁中看到一句話:當一個頁面關(guān)閉時會自動釋放頁面的js。短短一句話給了我不小的啟發(fā)。檢查我的程序是否有頁面的關(guān)閉或轉(zhuǎn)向,發(fā)現(xiàn)是執(zhí)行了轉(zhuǎn)向,然后再回到這個頁面時出現(xiàn)了錯誤。突然間覺得明白了。
場景:頁面有a和b兩個框架頁iframe,在b頁面中通過js將一個函數(shù)引用(函數(shù)指針)傳入到a頁面并保存在a頁面的一個變量中,a頁面可以通過這個引用操作b頁面或執(zhí)行b頁面的一些程序,記?。捍藭r在a頁面中的變量保存的是b頁面某函數(shù)的指針(內(nèi)存地址),當b頁面刷新或重定向后由于b頁面重新構(gòu)建,所以b頁面中的函數(shù)指針就發(fā)生了變化,但a中仍然保存著b頁面刷新前傳過來的指針(內(nèi)存地址),這時a頁面中變量通過所指向的指針地址就無法訪問到b頁面中對應(yīng)的函數(shù)了(因為函數(shù)指針地址已經(jīng)發(fā)生了變化,及原來的內(nèi)存指針已經(jīng)釋放),這樣在執(zhí)行時就會出現(xiàn)“不能執(zhí)行已經(jīng)釋放的Script代碼”的錯誤。
解決辦法:在a頁面中加上容錯處理,當引用出現(xiàn)錯誤時要將保存的引用(函數(shù)指針)清空或指向一個默認的函數(shù)。另外在b頁面再次載入時要重新給a頁面?zhèn)魉秃瘮?shù)引用,這樣就不會出現(xiàn)這樣的錯誤了。
或許這里的描述有些過于抽象了,看一個演示再看看代碼就容易明白了,先test,然后return url,之后再test就會出現(xiàn)這個問題了。
這種錯誤從何調(diào)起?后面沒辦法,又是猜測又是try...catch蹦錯誤,找了半天終于找到錯誤的位置,可是發(fā)現(xiàn)寫的并沒有什么問題,后來絞盡腦汁思考程序的解釋過程,確依舊沒有什么頭緒。繼續(xù)baidu,突然在某網(wǎng)頁中看到一句話:當一個頁面關(guān)閉時會自動釋放頁面的js。短短一句話給了我不小的啟發(fā)。檢查我的程序是否有頁面的關(guān)閉或轉(zhuǎn)向,發(fā)現(xiàn)是執(zhí)行了轉(zhuǎn)向,然后再回到這個頁面時出現(xiàn)了錯誤。突然間覺得明白了。
場景:頁面有a和b兩個框架頁iframe,在b頁面中通過js將一個函數(shù)引用(函數(shù)指針)傳入到a頁面并保存在a頁面的一個變量中,a頁面可以通過這個引用操作b頁面或執(zhí)行b頁面的一些程序,記?。捍藭r在a頁面中的變量保存的是b頁面某函數(shù)的指針(內(nèi)存地址),當b頁面刷新或重定向后由于b頁面重新構(gòu)建,所以b頁面中的函數(shù)指針就發(fā)生了變化,但a中仍然保存著b頁面刷新前傳過來的指針(內(nèi)存地址),這時a頁面中變量通過所指向的指針地址就無法訪問到b頁面中對應(yīng)的函數(shù)了(因為函數(shù)指針地址已經(jīng)發(fā)生了變化,及原來的內(nèi)存指針已經(jīng)釋放),這樣在執(zhí)行時就會出現(xiàn)“不能執(zhí)行已經(jīng)釋放的Script代碼”的錯誤。
解決辦法:在a頁面中加上容錯處理,當引用出現(xiàn)錯誤時要將保存的引用(函數(shù)指針)清空或指向一個默認的函數(shù)。另外在b頁面再次載入時要重新給a頁面?zhèn)魉秃瘮?shù)引用,這樣就不會出現(xiàn)這樣的錯誤了。
或許這里的描述有些過于抽象了,看一個演示再看看代碼就容易明白了,先test,然后return url,之后再test就會出現(xiàn)這個問題了。
相關(guān)文章
JavaScript動態(tài)創(chuàng)建form表單并提交的實現(xiàn)方法
這篇文章主要介紹了JavaScript動態(tài)創(chuàng)建form表單并提交的實現(xiàn)方法,涉及JavaScript動態(tài)創(chuàng)建頁面元素及模擬表單提交的技巧,需要的朋友可以參考下2015-12-12JavaScript時間戳與時間日期間相互轉(zhuǎn)換
今天做項目遇到這樣的問題,要將獲取到的時間轉(zhuǎn)換為時間戳,通過查閱相關(guān)資料,問題順利解決,下面小編把具體實現(xiàn)代碼分享到腳本之家平臺,需要的朋友參考下2017-12-12JavaScript中實現(xiàn)sprintf、printf函數(shù)
這篇文章主要介紹了JavaScript中實現(xiàn)sprintf、printf函數(shù),這兩個函數(shù)在大多數(shù)編程語言中都有,但JS中卻沒有,本文介紹在js中實現(xiàn)這兩個函數(shù)功能,需要的朋友可以參考下2015-01-01