chromium - ERR_CONTENT_DECODING_FAILED
阿新 • • 發佈:2018-12-20
前言
對一個內建web-ui,加了點功能,除錯都正常了。
嘗試將這個web-ui實現,挪到我自己的web-ui中,執行時,網頁出來後是白頁,顯示報錯資訊為"ERR_CONTENT_DECODING_FAILED"
嘗試解決這個錯誤
實驗
出現這個錯誤時,我有2個好的web-ui實現。
- 我改好的內建web-ui
- 我自己搞的web-ui
錯誤僅僅發生在將改好的web-ui挪到我自己的web-ui時。
其實這種場景(有正確的case, 有錯誤的case, bug能重現),出現bug, 心裡是有底的,一點不慌。
剛玩chromium, 排bug的方法採用對比和逐步加程式碼+測試驗證的方法。
發現呼叫了html_source->UseGzip(); 就會出現"ERR_CONTENT_DECODING_FAILED"
這時看看這句程式碼,再看看錯誤資訊,已經能明白,是資源的編碼方式引起的。
去Z:\chromium\src\chrome\browser\browser_resources.grd,去看資源(*.html, *.css, *.js)
chromium的資源條目,每一個都可以指定type=“xx” compress=“xx”, 其中compress="gzip"就是資源採用gzip壓縮.
<include name="IDR_HELLO_WORLD_HTML" file="resources\my_page\my_hello_world.html" type="chrome_html" compress="gzip" /> <include name="IDR_HELLO_WORLD_CSS" file="resources\my_page\my_hello_world.css" type="BINDATA" compress="gzip" /> <include name="IDR_HELLO_WORLD_JS" file="resources\my_page\my_hello_world.js" type="BINDATA" compress="gzip" /> <include name="IDR_HELLO_WORLD_BROWSER_PROXY_JS" file="resources\my_page\my_hello_world_browser_proxy.js" type="BINDATA" compress="gzip" /> <include name="IDR_HELLO_WORLD_VISUALS_JS" file="resources\my_page\my_hello_world_visuals.js" type="BINDATA" compress="gzip" />
如果指定了compress=“gzip”,c++程式碼中就要呼叫html_source->UseGzip(); 否則出現ERR_CONTENT_DECODING_FAILED或亂碼
最簡單方法,就是看看其他資源條目怎麼寫的,試試就行。
改了資原始檔browser_resources.grd,需要重新生成工程,編譯工程,再跑起來看效果。
# cd /d Z:\chromium\src\
# gn --ide=vs args out\my_x86_d
# autoninja -C out\my_x86_d chrome