【问题标题】:How to hide (not destroy) a BrowserView in Electron如何在 Electron 中隐藏(不破坏)BrowserView
【发布时间】:2019-06-12 14:17:19
【问题描述】:

我在 Electron 5.0.3 中工作,我想隐藏一个 BrowserView 以便不需要重新创建 BrowserView。我对如何实现这一点没有任何偏好。任何解决方案(JS、CSS 等)都足够了。

我查看了BrowserView documentation,但我认为这里没有任何帮助,将 BrowserView 移动到屏幕外的某个地方并不完全理想。

【问题讨论】:

    标签: electron


    【解决方案1】:

    我知道这是旧的,但我遇到了这个解决方案的问题并有替代方案。

    在某些情况下,从 BrowserWindow 中删除 BrowserView 可能会产生一些意想不到的后果。我发现如果您使用BrowserView 托管外部内容,而删除和设置似乎保留了内容,您可能会失去一些通过代码(例如通过view.webContents.executeJavaScript())或在某些情况下用户界面与其交互的能力调用异步事件的控件有时会完全停止工作。

    如果您只想隐藏BrowserView,将边界设置为 0 效果非常好:

      view.setBounds({ x: 0, y: 0, width: 0, height: 0 })
    

    然后使用主机BrowserWindow维度恢复:

      let wb = win.getBounds()
      view.setBounds({ x: 0, y: 0, width: wb.width, height: wb.height })
    

    旁注:setBrowserView()addBrowserView() 之间存在差异。前者将从BrowserWindow 中删除所有其他BrowserViews(这意味着如果您也在设置视图,则无需显式删除视图,并且如果您正在使用添加,则需要管理您的视图。)

    【讨论】:

      【解决方案2】:

      第一个解决方案(最佳):

      browserWindow.addBrowserView(browserView)
      browserWindow.removeBrowserView(browserView)
      

      addBrowserView() & removeBrowserView()。移除浏览器视图和隐藏一样,不会让浏览器视图重新渲染。

      次要解决方案(非最佳):

      // not optimal if you call more than once because it will constantly add more CSS
      browserView.webContents.insertCSS('html{display: block}')
      browserView.webContents.insertCSS('html{display: none}')
      

      insertCSS()

      【讨论】:

      • 当我这样做时,它确实会重新渲染 BrowserView ?状态每次都会丢失。
      • @J.Hesters 这两种解决方案都适用于所有具有这些功能的电子版本。我在应用程序中使用顶级解决方案,并且按照说明进行操作。不太清楚为什么它不适合你:/
      • 谢谢。我发现了!我每次都在重新加载网址。一旦我摆脱了它,一切正常??
      猜你喜欢
      • 1970-01-01
      • 2011-12-29
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      相关资源
      最近更新 更多