Updated required code to handle missing additional features for popup windows

This commit is contained in:
Michael Vasseur 2016-09-15 15:37:35 +02:00 committed by Cheng Zhao
parent ef88a06f08
commit c811188e22
9 changed files with 35 additions and 17 deletions

View file

@ -18,13 +18,13 @@ BrowserWindow.prototype._init = function () {
}
// Make new windows requested by links behave like "window.open"
this.webContents.on('-new-window', (event, url, frameName, disposition) => {
this.webContents.on('-new-window', (event, url, frameName, disposition, additionalFeatures) => {
const options = {
show: true,
width: 800,
height: 600
}
ipcMain.emit('ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN', event, url, frameName, disposition, options)
ipcMain.emit('ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN', event, url, frameName, disposition, options, additionalFeatures)
})
this.webContents.on('-web-contents-created', (event, webContents, url,

View file

@ -135,9 +135,9 @@ const getGuestWindow = function (guestId) {
}
// Routed window.open messages.
ipcMain.on('ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN', function (event, url, frameName, disposition, options) {
ipcMain.on('ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN', function (event, url, frameName, disposition, options, additionalFeatures) {
options = mergeBrowserWindowOptions(event.sender, options)
event.sender.emit('new-window', event, url, frameName, disposition, options)
event.sender.emit('new-window', event, url, frameName, disposition, options, additionalFeatures)
if ((event.sender.isGuest() && !event.sender.allowPopups) || event.defaultPrevented) {
event.returnValue = null
} else {

View file

@ -88,7 +88,7 @@ if (process.guestInstanceId == null) {
// Make the browser window or guest view emit "new-window" event.
window.open = function (url, frameName, features) {
var feature, guestId, i, j, len, len1, name, options, ref1, ref2, value
var feature, guestId, i, j, len, len1, name, options, ref1, ref2, value, additionalFeatures
if (frameName == null) {
frameName = ''
}
@ -101,6 +101,9 @@ window.open = function (url, frameName, features) {
const webPreferences = ['zoomFactor', 'nodeIntegration', 'preload']
const disposition = 'new-window'
// Used to store additional features
additionalFeatures = []
// Make sure to get rid of excessive whitespace in the property name
ref1 = features.split(/,\s*/)
for (i = 0, len = ref1.length; i < len; i++) {
@ -109,13 +112,17 @@ window.open = function (url, frameName, features) {
name = ref2[0]
value = ref2[1]
value = value === 'yes' || value === '1' ? true : value === 'no' || value === '0' ? false : value
if (webPreferences.includes(name)) {
if (options.webPreferences == null) {
options.webPreferences = {}
}
options.webPreferences[name] = value
if (value === undefined) {
additionalFeatures.push(feature)
} else {
options[name] = value
if (webPreferences.includes(name)) {
if (options.webPreferences == null) {
options.webPreferences = {}
}
options.webPreferences[name] = value
} else {
options[name] = value
}
}
}
if (options.left) {
@ -150,7 +157,7 @@ window.open = function (url, frameName, features) {
options[name] = parseInt(options[name], 10)
}
}
guestId = ipcRenderer.sendSync('ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN', url, frameName, disposition, options)
guestId = ipcRenderer.sendSync('ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN', url, frameName, disposition, options, additionalFeatures)
if (guestId) {
return BrowserWindowProxy.getOrCreate(guestId)
} else {