JavaScript出現“不能執行已釋放的Script代碼”錯誤的原因及解決辦法

來源:互聯網
上載者:User
 很多web開發人員或許都遇到過這樣的問題,程式莫名奇怪出現“不能執行已釋放Script的代碼”,錯誤行1,列1.對於這種訊息描述不著邊,行列描述更是讓人迷茫的js錯誤,相信是所有調試js程式的朋友們最鬱悶也最憎恨的事情!遇到這種問題,最簡單的辦法直接把錯誤貼到baidu或google那個小輸入框中讓他們先給點指點,再去解決,可這次卻沒有這麼容易,在baidu搜尋似乎很多人都遇到過這種問題,但是都是些什麼qq空間錯誤,狂暈,或者就是只有問沒有答的,悶!

   這種錯誤從何調起?後面沒辦法,又是猜測又是try...catch蹦錯誤,找了半天終於找到錯誤的位置,可是發現寫的並沒有什麼問題,後來絞盡腦汁思考程式的解釋過程,確依舊沒有什麼頭緒。繼續baidu,突然在某網頁中看到一句話:當一個頁面關閉時會自動釋放頁面的js。短短一句話給了我不小的啟發。檢查我的程式是否有頁面的關閉或轉向,發現是執行了轉向,然後再回到這個頁面時出現了錯誤。突然間覺得明白了。

情境:頁面有a和b兩個架構頁iframe,在b頁面中通過js將一個函數引用(函數指標)傳入到a頁面並儲存在a頁面的一個變數中,a頁面可以通過這個引用操作b頁面或執行b頁面的一些程式,記住:此時在a頁面中的變數儲存的是b頁面某函數的指標(記憶體位址),當b頁面重新整理或重新導向後由於b頁面重新構建,所以b頁面中的函數指標就發生了變化,但a中仍然儲存著b頁面重新整理前傳過來的指標(記憶體位址),這時a頁面中變數通過所指向的指標地址就無法訪問到b頁面中對應的函數了(因為函數指標地址已經發生了變化,及原來的記憶體指標已經釋放),這樣在執行時就會出現“不能執行已經釋放的Script代碼”的錯誤。

解決辦法:在a頁面中加上容錯處理,當引用出現錯誤時要將儲存的引用(函數指標)清空或指向一個預設的函數。另外在b頁面再次載入時要重新給a頁面傳送函數引用,這樣就不會出現這樣的錯誤了。

或許這裡的描述有些過於抽象了,看一個示範再看看代碼就容易明白了,先test,然後return url,之後再test就會出現這個問題了。
示範頁面: attachment/200708/1187167689_0.html  

解決方案:
在 按 return url 的事件程式之前加入
doOK = function(){alert('good');};document.getElementById('ifrm').src='t2.html'

這樣就恢複了doOK函數指向的不存在的指標。有問題回複。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.