电子处理卡住了BrowserView

问题描述 投票:0回答:1

我正在构建的应用程序基本上将在其中托管其他网页作为子视图(BrowserViews),类似于chrome如何在一个窗口(BrowserWindow)中渲染不同的选项卡。

我面临一个问题,当一个 BrowserView 卡住(故意)时,我无法使用

removeBrowserView
将其从主 BrowserWindow 中删除,似乎只有当卡住的视图滥用许多 console.log 的内存时才应用它。

我的代码如下: 主流程索引.ts:

const createWindow = (): void => {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    height: 600,
    width: 800,
    webPreferences: {
      preload: MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY,
    },
  });

  // and load the index.html of the app.
  mainWindow.loadURL(MAIN_WINDOW_WEBPACK_ENTRY);

  const stuckme1 = new BrowserView();
  stuckme1.webContents.loadURL(STUCKME_WEBPACK_ENTRY);
  stuckme1.setBounds({ x: 0, y: 0, height: 200, width: 200 });

  const stuckme2 = new BrowserView();
  stuckme2.webContents.loadURL(STUCKME2_WEBPACK_ENTRY);
  stuckme2.setBounds({ x: 0, y: 0, height: 200, width: 200 });

  let toggle = true;
  setInterval(() => {
    if (toggle) {
      mainWindow.removeBrowserView(stuckme1);
      mainWindow.addBrowserView(stuckme2);
    } else {
      mainWindow.removeBrowserView(stuckme2);
      mainWindow.addBrowserView(stuckme1);
    }

    toggle = !toggle;
  }, 1000);
};
<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>Hello World!</title>
    <style>
        body {
            border: 1px soild green;
        }
    </style>
    <script type="text/javascript">
        setInterval(() => {
            document.querySelector(".counter").innerHTML = Number(document.querySelector(".counter").innerHTML) + 1
        }, 1000);


        setTimeout(() => {
            while (true) { console.log("stuck"); }
        }, 5000);
    </script>
</head>

<body>

    <p>Stuck me</p>
    <span class="counter"></span>
</body>

</html>

和Stickme2.html:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" />
    <title>Hello World!</title>
    <style>
        body {
            border: 1px soild red;
        }
    </style>
    <script type="text/javascript">
        setInterval(() => {
            document.querySelector(".counter").innerHTML = Number(document.querySelector(".counter").innerHTML) + 1
        }, 1000);


    </script>
</head>

<body>

    <p>Stuck me2</p>
    <span class="counter"></span>
</body>

</html>

5秒后, 仅显示第一个stuckme.html,主流程似乎无法删除视图并显示第二个视图。 没有抛出错误,但是内存使用量不断变大。

我需要一种方法来保持视图响应,即使其中编写了错误的代码。

感谢对此的任何帮助。

谢谢!

javascript html electron electron-forge
1个回答
0
投票

以下解决方案对我有用:

stuckme1.webContents.close()
© www.soinside.com 2019 - 2024. All rights reserved.