更新: 最近版本的 Chrome 似乎已将 PDF 查看器资源从resources.pak 移出并移至浏览器二进制文件本身。应该仍然可以下载 Chromium 源代码,编辑下面描述的文件,然后重新编译,但这比简单地破解 resources.pak 要痛苦得多。谢谢,谷歌。
事实上,有一种方法,但我们必须亲自动手,而且每次更新 Chrome 时都必须重复这个过程。不过,对我来说,努力是值得的。我喜欢将 PDF 查看器的背景更改为白色,这样当我在晚上激活颜色反转 Deluminate 扩展时,我会得到一个漂亮的纯黑色背景。与默认背景相比,它在我的眼睛上要容易得多,当倒置时,它会非常明亮。
Chrome 源代码树包含数千个 HTML、JS 和 CSS 文件,这些文件控制浏览器许多部分的行为和外观,包括 PDF 查看器。构建 Chrome 时,这些“资源”被捆绑到一个文件中,resources.pak,浏览器在启动期间将其解压缩到内存中。我们需要做的是在磁盘上解压resources.pak,编辑PDF 查看器样式的文件,然后重新打包。
我们首先需要的是一个可以解压resources.pak的工具。我知道的唯一一个是ChromePAK-V5。它是用 Go 编写的,所以我们需要它来构建它。我们还需要安装一个名为go-bindata 的构建时依赖项。以下是我的做法:
cd ~/code/chrome
go get -u github.com/jteeuwen/go-bindata/...
git clone https://github.com/shuax/ChromePAK-V5.git
cd ChromePAK-V5
~/go/bin/go-bindata -nomemcopy -o assets.go assets
go build
cd ..
现在我们已经获得了二进制文件ChromePAK-V5/ChromePAK-V5,我们可以使用它来解压resources.pak。就我而言,在 Linux 上运行 Chromium,该文件位于 /usr/lib/chromium/resources.pak,但它可能在其他地方适合您。找到后,将其复制、备份并解压缩:
cd ~/code/chrome
cp /usr/lib/chromium/resources.pak .
cp resources.pak resources.pak.bak
ChromePAK-V5/ChromePAK-V5 -c=unpack -f=resources.pak
此时,我们需要的文件将位于resources 目录中的某个位置。现在,在原始的 Chrome 源代码树中,这些文件都有合理的路径,例如 chrome/browser/resources/pdf/pdf_viewer.js。不幸的是,这些原始路径没有记录在resources.pak 文件中。 ChromePAK-V5 试图通过使用将资源文件的 SHA1 哈希映射到其原始路径的表来变得聪明,但随着时间的推移,文件及其哈希值会发生变化,ChromePAK-V5 无法再识别它们。如果文件无法识别,ChromePAK-V5 会将其解压缩到例如resources/unknown/12345。而且,一般来说,这些数字会从一个 Chrome 版本更改为下一个版本。因此,要找到我们需要编辑的文件,我们基本上需要用 grep 查找识别它们的“指纹”。让我们开始吧。
PDF 查看器的背景颜色由在 Chrome 源代码树中名为 chrome/browser/resources/pdf/pdf_viewer.js 的文件控制。要查找该文件,请在 resources/unknown 中查找字符串 PDFViewer.BACKGROUND_COLOR。就我而言,该文件在unknown/10282 解压。打开此文件,并更改设置PDFViewer.BACKGROUND_COLOR 的行(在文件末尾/附近)。我将其更改为0xFFFFFFFF,即白色(在 Deluminate 下变为黑色)。
更进一步,我们还可以重新设置 PDF 查看器工具栏的样式。默认情况下,工具栏是暗的,因此在 Deluminate 下它会变得非常亮。为了解决这个问题,我们需要找到chrome/browser/resources/pdf/elements/viewer-pdf-toolbar.html。我通过搜索shadow-elevation-2dp 在unknown/10307 找到了它。我所做的是转到#toolbar 块并添加filter: invert(100%);。瞧,晚上不再有令人眼花缭乱的工具栏了。
最后,如果我们真的想一路走下去,我们可以摆脱在加载 PDF 时出现的原始背景颜色的短暂“闪烁”。这种颜色由chrome/browser/resources/pdf/index.css 控制,我在unknown/10304 通过grepping for viewer-page-indicator { 找到了它。我将body 的background-color 属性更改为white(即Deluminate 下的黑色)。
困难的部分现在结束了。最后一步是重新打包资源并覆盖系统resources.pak:
ChromePAK-V5/ChromePAK-V5 -c=repack -f=resources.json
sudo cp resources.pak /usr/lib/chromium # or wherever yours should go
现在重新启动浏览器,尽情享受吧!