Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Electron will crash when I call BrowserView.destroy(). #37419

Closed
3 tasks done
TianbinTobin opened this issue Feb 27, 2023 · 0 comments · Fixed by #37420
Closed
3 tasks done

[Bug]: Electron will crash when I call BrowserView.destroy(). #37419

TianbinTobin opened this issue Feb 27, 2023 · 0 comments · Fixed by #37420
Assignees
Labels
23-x-y bug 🪲 component/BrowserView has-repro-gist Issue can be reproduced with code at https://gist.github.com/ platform/windows status/confirmed A maintainer reproduced the bug or agreed with the feature

Comments

@TianbinTobin
Copy link

TianbinTobin commented Feb 27, 2023

Preflight Checklist

Electron Version

23.1.0

What operating system are you using?

Windows

Operating System Version

Windows 11 22H2 22621.1265

What arch are you using?

x64

Last Known Working Electron version

21.4.2

Expected Behavior

Electron will not exit and browserView will close.

Actual Behavior

Electron exited with code 3221225477.

Testcase Gist URL

No response

Additional Information

I publish fiddle to github failed. /(ㄒoㄒ)/~~

main.js

// Modules to control application life and create native browser window
const { app, BrowserWindow, BrowserView, ipcMain, dialog } = require('electron')
const path = require('path')

function createWindow() {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: false,
      contextIsolation: true,
      preload: path.join(__dirname, 'preload.js')
    }
  })

  // and load the index.html of the app.
  mainWindow.loadFile('index.html')

  const mainView = new BrowserView({
    webPreferences: {
      nodeIntegration: false,
      contextIsolation: true,
    }
  })

  mainView.webContents.loadURL('https://boardmix.cn/app/')

  mainWindow.setBrowserView(mainView);

  const windowBounds = mainWindow.getContentBounds();
  const viewWidth = windowBounds.width - 2;
  const viewHeight = windowBounds.height - 200 - 1;
  mainView.setBounds({ x: 1, y: 200, width: viewWidth, height: viewHeight });

  ipcMain.on('close', () => {
    if (!mainView.webContents || mainView.webContents.isDestroyed()) {
      dialog.showMessageBox({message: 'webContents is destroyed'})
    } else {
      mainView.webContents.destroy();
    }
  })

  // Open the DevTools.
  // mainWindow.webContents.openDevTools()
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
  createWindow()

  app.on('activate', function () {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

renderer.js

document.querySelector('h1').addEventListener('click', () => {
    desktopManagerApi.close();
})

preload.js

const { contextBridge, ipcRenderer } = require('electron')

contextBridge.exposeInMainWorld('desktopManagerApi', {
  close() {
    ipcRenderer.send('close')
  }
});

But, if i call webContents.close(), the destroyed event not be emitted. webContents.isDestroyed() is false.

@codebytere codebytere self-assigned this Feb 27, 2023
@codebytere codebytere added status/confirmed A maintainer reproduced the bug or agreed with the feature has-repro-gist Issue can be reproduced with code at https://gist.github.com/ labels Feb 27, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
23-x-y bug 🪲 component/BrowserView has-repro-gist Issue can be reproduced with code at https://gist.github.com/ platform/windows status/confirmed A maintainer reproduced the bug or agreed with the feature
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants