1. 程式人生 > 實用技巧 >記一次開發CefSharp做瀏覽器時關閉頁面上時未釋放遇到的小問題

記一次開發CefSharp做瀏覽器時關閉頁面上時未釋放遇到的小問題

問題:當CefSharp放在List裡,然後用了Remove移除,CefSharp是否還存在。

我將Cefsharp做成UserControl控制元件,然後在Main頁面裡採用List<UserControl>的方式做一個瀏覽器的標籤頁如下圖

然後我右擊關閉的時候,習慣性的直接Remove掉,而這時問題就出現了。Cef並沒有被釋放掉,依舊存在於後臺。(注:發現這個問題也是挺湊巧的,那時剛好在試驗CefSharp播放Mp4,然後我Remove掉頁面的時候,之前頁面居然還在播放聲音,這才引起了我的注意。)

解決辦法就是:在關閉的時候呼叫一下browser.GetBrowser().CloseBrowser(true);。當然這裡面還有一個問題,當你開了多個標籤的時候你關掉了某一個會突然出現前面的頁面好像也一起釋放掉了,頁面直接空白。

經過排查得知當你選擇去讓CefSharp不彈出新視窗的是時候會去寫ILifeSpanHandler。如果在DoClose這個方法裡選擇去return false 。那麼你就會遇到我上面遇到問題。那麼隨之而來的又有一個新問題。就是當你選擇去return true時。如果你有用上DevTool進行頁面除錯的話,你會發現當DevTool開啟後再點關閉它會關不掉。因此最終可以採用以下寫法如圖示

解釋下,第一步:判斷DevTool是否已經開啟。如果已經開啟並且當前要關閉的頁面屬於彈窗(因為DevTool屬於彈窗)時選擇去return false。其他時候關閉頁面時就去return true。這樣一來就可以解決這些問題。

(可能寫的文章對於大佬來說雞肋,但這卻是我開發過程中遇到的點問題。只希望給後來者少走點坑。畢竟這個問題我在百度上沒找到解答,所以就寫下來。)

文章不易,如有錯誤,請指出。轉載請標明連結