如何解决Electron 如何确定自定义协议的来源
我有一个使用自定义 app://
协议来提供文件的 Electron 应用。 Chrome/Electron 似乎认为从该协议返回的所有文件都来自同一来源。这意味着应用页面具有相同的缩放级别,这不是我想要的。
在这种情况下,Electron 如何确定来源(指向代码的指针会有所帮助),有没有什么方法可以说服它某些 URL 来自不同的来源,而无需注册另一个协议,例如 app2://
?
解决方法
我在 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
。似乎工作完美。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。