我遇到了一個令人困惑的問題,我正在寫一個ActiveX控件 - 有時,Internet Explorer似乎無法正確卸載過程關閉控件。這導致控件實例的析構函數不被調用。在什麼情況下Internet Explorer無法正確卸載ActiveX控件?
該控件是用C++編寫的,使用ATL並使用Visual Studio 2005編譯。控件實例的析構函數總是在用戶瀏覽控件所嵌入的頁面時調用 - 問題只發生在瀏覽器關閉。當我在調試器下運行IE時,我沒有看到任何異常 - 調試器沒有發現任何異常,訪問衝突或斷言失敗,但問題仍然存在 - 我可以在控件中設置斷點析構函數,當我關閉瀏覽器時它從來沒有被打。
此外,當我加載一個嵌入控件的多個實例的簡單HTML頁面時,我沒有看到問題。這個問題似乎只發生在控件從我們的web應用程序實例化的時候,它會動態地將標籤插入到網頁中 - 當然,不知道是什麼原因導致了這個問題,我不知道這一點信息是否相關,但它似乎表明這可能是一個IE問題,因爲它依賴於數據。
當我在調試器下運行簡單的測試用例時,我可以在控件的析構函數中設置一個斷點,並且每次都會觸發它。我相信這排除了控制本身的問題(比如說,一個會阻止析構函數被稱爲接口泄漏的錯誤)。
我使用IE 6測試了大部分測試,但我在IE 7上也發現問題。我還沒有測試過IE 8
我現在的工作假設是動態HTML代碼中有一些東西導致瀏覽器泄漏ActiveX控件上的一個接口。到目前爲止,我還沒有能夠生成一個能夠在應用程序之外重現此類應用程序的好測試用例,而且該應用程序有點太大而無法做出好的測試用例。
我希望有人能夠提供洞察,可能會導致這種行爲的IE錯誤。順便提一下,下面提供的答案太籠統了 - 我正在尋找一系列已知導致此情況的具體情況。當然有人在那裏見過這個。
感謝您的建議。動態的HTML代碼是足夠多毛的,沒有人確定它是如何工作的,我試圖解開它足以創建一個再現問題的測試用例迄今爲止失敗了。 – 2008-09-16 23:15:05