fix: <webview> not working in scriptable popups (#19198)

This commit is contained in:
Milan Burda 2019-07-12 03:56:04 +02:00 committed by Shelley Vohr
parent e26f366405
commit 35294891ae
5 changed files with 53 additions and 3 deletions

View file

@ -836,6 +836,27 @@ describe('BrowserWindow module', () => {
})
w.loadFile(path.join(fixtures, 'api', 'native-window-open-native-addon.html'))
})
it('<webview> works in a scriptable popup', (done) => {
const preload = path.join(fixtures, 'api', 'new-window-webview-preload.js')
w.destroy()
w = new BrowserWindow({
show: false,
webPreferences: {
nodeIntegrationInSubFrames: true,
nativeWindowOpen: true,
webviewTag: true,
preload
}
})
ipcRenderer.send('set-options-on-next-new-window', w.webContents.id, 'show', false)
ipcMain.once('webview-loaded', () => {
done()
})
w.loadFile(path.join(fixtures, 'api', 'new-window-webview.html'))
})
it('should inherit the nativeWindowOpen setting in opened windows', (done) => {
w.destroy()
w = new BrowserWindow({

View file

@ -0,0 +1,3 @@
const { ipcRenderer } = require('electron')
window.ipcRenderer = ipcRenderer

View file

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
const code = `
var webview = document.createElement('webview')
webview.src = 'about:blank'
webview.addEventListener('did-finish-load', () => {
ipcRenderer.send('webview-loaded')
}, {once: true})
document.body.appendChild(webview)
`
open('about:blank').eval(code)
</script>
</body>
</html>

View file

@ -231,6 +231,12 @@ ipcMain.on('prevent-next-new-window', (event, id) => {
webContents.fromId(id).once('new-window', event => event.preventDefault())
})
ipcMain.on('set-options-on-next-new-window', (event, id, key, value) => {
webContents.fromId(id).once('new-window', (event, url, frameName, disposition, options) => {
options[key] = value
})
})
ipcMain.on('set-web-preferences-on-next-new-window', (event, id, key, value) => {
webContents.fromId(id).once('new-window', (event, url, frameName, disposition, options) => {
options.webPreferences[key] = value