chromium - ERR_CONTENT_DECODING_FAILED

前言

对一个内建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

猜你喜欢

转载自blog.csdn.net/LostSpeed/article/details/85119755
今日推荐