【问题标题】:How does Electron determine origin for custom protocolsElectron 如何确定自定义协议的来源
【发布时间】:2021-04-18 10:35:50
【问题描述】:

我有一个使用自定义 app:// 协议来提供文件的 Electron 应用程序。 Chrome/Electron 似乎认为从该协议返回的所有文件都来自同一来源。这意味着应用页面具有相同的缩放级别,这不是我想要的。

在这种情况下,Electron 如何确定来源(指向代码的指针会有所帮助),是否有任何方法可以说服它某些 URL 来自不同的来源,而不是注册另一个协议,例如 app2://

【问题讨论】:

    标签: google-chrome electron same-origin-policy


    【解决方案1】:

    我在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.htmlapp://help/help.html。似乎工作得很好。

    【讨论】:

      猜你喜欢
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      相关资源
      最近更新 更多