我在the Chromium source code找到了一些文档:
// Zoom can be defined at three levels: default zoom, zoom for host, and zoom
// for host with specific scheme. Setting any of the levels leaves settings
// for other settings intact. Getting the zoom level starts at the most
// specific setting and progresses to the less specific: first the zoom for the
// host and scheme pair is checked, secondly the zoom for the host only and
// lastly default zoom.
而in zoom_controller.cc 似乎只是使用 URL 中的方案/主机:
GURL url = content::HostZoomMap::GetURLFromEntry(entry);
std::string host = net::GetHostOrSpecFromURL(url);
if (zoom_map->HasZoomLevel(url.scheme(), host)) {
// If there are other tabs with the same origin, then set this tab's
// zoom level to match theirs. The temporary zoom level will be
// cleared below, but this call will make sure this tab re-draws at
// the correct zoom level.
double origin_zoom_level =
zoom_map->GetZoomLevelForHostAndScheme(url.scheme(), host);
和
std::string GetHostOrSpecFromURL(const GURL& url) {
return url.has_host() ? TrimEndingDot(url.host_piece()) : url.spec();
}
url.spec() 实际上返回整个 URL,这向我表明,如果我浏览 file:// URL,它们将获得单独的缩放级别。我通过实验验证了这一点,似乎确实如此。
无论如何,我都知道我的情况发生了什么——我在使用 WebPack 开发服务器的开发模式下运行。在这种情况下,所有文件都从localhost 提供,因此它们始终获得相同的缩放。
但是在使用app:// 协议的生产环境中,我的代码将主机设置为.,因此URL 类似于app://./index.html。主机实际上被自定义协议处理程序忽略了,因此要为 Windows 提供单独的来源,您只需为它们编一个假主机名,例如 app://main/index.html 或 app://help/help.html。似乎工作得很好。