記一次開發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。這樣一來就可以解決這些問題。

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM