2011-06-14 123 views
1

離開Firefox運行一段時間後,奇怪的事情開始發生在我的擴展中。下面是一些代碼,我需要說明問題:Firefox卸載加載了Components.utils.import()的模塊?

extension.js

VAR我= {};

overlay.js中

Components.utils.import( 「資源://myextension/extension.js」);

My.extension = (function() { 
    var someFunc = function() { 
    // more code 
    My.module.otherFunc(); 
    }; 

    // more code 
})(); 

在某些時候,我們開始越來越奇怪的錯誤:「我」是未定義在overlay.js中:6個

我的猜測是,Firefox的卸載extension.js模塊默默的,否則我不能」找到任何暗示爲什麼會發生這種情況。你做?

Firefox版本:3.x

謝謝!

+0

我沒有得到你的extension.js,你有導出符號嗎?這是整個文件嗎?此外,是瀏覽器overlay.js覆蓋? – Mihailo 2011-06-14 15:47:24

+0

是的,我從extension.js中導出符號(這是一個剝離版本)。代碼工作正常,但在某個時間停止工作(給出提到未定義的符號錯誤) – spektom 2011-06-14 20:11:44

+0

很酷,你打開新窗口/關閉窗口之前,讓它閒置一段時間嗎?我的意思是,你有沒有試過在不涉及等待時間的情況下進行再現? – Mihailo 2011-06-15 09:21:56

回答

0

雖然您可以將模塊作爲臨時回調函數傳遞給模塊,但您應該採取措施確保在窗口關閉後不使用它們,因爲其所有全局變量(包括My)都將被刪除。如果模塊隨後嘗試調用該函數,那麼您將如所述那樣得到錯誤。

+0

我不明白這一點。如果擴展在瀏覽器chrome上下文中運行,則「我的」變量綁定到chrome瀏覽器,不是嗎?關閉窗口如何處置這個變量? – spektom 2011-06-16 12:48:35

+0

@spektom關閉窗口將刪除窗口中定義的所有變量。它不會刪除模塊中定義的變量,但這不是發生錯誤的地方。 – Neil 2011-06-16 14:05:24

+0

'someFunc'從「onclick」處理程序中調用,這意味着窗口仍然打開,對不對? – spektom 2011-06-16 15:34:06