cef中最簡單的打開頁面方法是指定一個url或者本地路徑。在使用cef開發客戶端時,多數情況是寫好了web頁面,把web資源放到本地來使用。而js文件中很可能會暴露一些接口或者重要數據,為了保護這些數據需要把web資源加密。例如網易雲音樂一類的客戶端都是這樣做的
這個問題其實就是資源重定向的問題,把cef請求的資源重定向到自己解密出來的數據處。資源重定向需要處理cef里面的OnBeforeResourceLoad、GetResourceHandler接口
翻了翻cef2623的demo,發現其實cef自身已經有了相關的功能。即CefResourceManager,創建一個CefResourceManager對象,調用AddArchiveProvider方法,可以添加一個加密zip文檔作為資源來源。然后在OnBeforeResourceLoad、GetResourceHandler接口中調用CefResourceManager對象對應名稱的接口,就可以直接使用加密zip中的資源了,很簡單
同時CefResourceManager提供了AddDirectoryProvider方法來把某個目錄作為資源來源,也可以調用AddProvider來自定義一個資源來源。在調用這些方式時,需要提供一個特征字符串開頭的URL。比如http://test/,如果cef正在打開的url是以http://test/開頭,則會從對應的資源來源里,去取資源。比如用加密zip的方式,同時嘗試打開http://test/demo.html,則會從zip里查找demo.html文件並打開
CefResourceManager還提供了filter功能,可以用於過濾url,來判斷那些url是需要重定向的,也可以設置重定向的位置
相關參考資料如下
(1)
https://blog.csdn.net/zhuhongshu/article/details/81484159
(2)
https://blog.csdn.net/Vincent95/article/details/77970004?locationNum=7&fps=1
(3)
https://bitbucket.org/chromiumembedded/cef/src/master/include/wrapper/cef_resource_manager.h?at=master&fileviewer=file-view-default
(4)
https://bitbucket.org/chromiumembedded/cef-project/src/master/examples/resource_manager/?at=master