diff --git a/default_app/main.js b/default_app/main.js index a3b8c9bc77..332ff4bf25 100644 --- a/default_app/main.js +++ b/default_app/main.js @@ -84,18 +84,10 @@ app.once('ready', () => { label: 'View', submenu: [ { - label: 'Reload', - accelerator: 'CmdOrCtrl+R', - click (item, focusedWindow) { - if (focusedWindow) focusedWindow.reload() - } + role: 'reload' }, { - label: 'Toggle Developer Tools', - accelerator: process.platform === 'darwin' ? 'Alt+Command+I' : 'Ctrl+Shift+I', - click (item, focusedWindow) { - if (focusedWindow) focusedWindow.toggleDevTools() - } + role: 'toggledevtools' }, { type: 'separator' diff --git a/docs/api/menu-item.md b/docs/api/menu-item.md index 5b5324df03..2c8a9c895c 100644 --- a/docs/api/menu-item.md +++ b/docs/api/menu-item.md @@ -56,6 +56,8 @@ The `role` property can have following values: * `minimize` - Minimize current window * `close` - Close current window * `quit`- Quit the application +* `reload` - Reload the current window +* `toggledevtools` - Toggle developer tools in the current window * `togglefullscreen`- Toggle full screen mode on the current window * `resetzoom` - Reset the focused page's zoom level to the original size * `zoomin` - Zoom in the focused page by 10% diff --git a/docs/api/menu.md b/docs/api/menu.md index b4e80689ad..3150d8ad55 100644 --- a/docs/api/menu.md +++ b/docs/api/menu.md @@ -137,18 +137,10 @@ const template = [ label: 'View', submenu: [ { - label: 'Reload', - accelerator: 'CmdOrCtrl+R', - click (item, focusedWindow) { - if (focusedWindow) focusedWindow.reload() - } + role: 'reload' }, { - label: 'Toggle Developer Tools', - accelerator: process.platform === 'darwin' ? 'Alt+Command+I' : 'Ctrl+Shift+I', - click (item, focusedWindow) { - if (focusedWindow) focusedWindow.webContents.toggleDevTools() - } + role: 'toggledevtools' }, { type: 'separator' diff --git a/lib/browser/api/menu-item-roles.js b/lib/browser/api/menu-item-roles.js index 888ff4f6b5..7777926cd4 100644 --- a/lib/browser/api/menu-item-roles.js +++ b/lib/browser/api/menu-item-roles.js @@ -72,6 +72,11 @@ const roles = { accelerator: process.platform === 'win32' ? 'Control+Y' : 'Shift+CommandOrControl+Z', webContentsMethod: 'redo' }, + reload: { + label: 'Reload', + accelerator: 'CmdOrCtrl+R', + windowMethod: 'reload' + }, resetzoom: { label: 'Actual Size', accelerator: 'CommandOrControl+0', @@ -93,6 +98,11 @@ const roles = { stopspeaking: { label: 'Stop Speaking' }, + toggledevtools: { + label: 'Toggle Developer Tools', + accelerator: process.platform === 'darwin' ? 'Alt+Command+I' : 'Ctrl+Shift+I', + windowMethod: 'toggleDevTools' + }, togglefullscreen: { label: 'Toggle Full Screen', accelerator: process.platform === 'darwin' ? 'Control+Command+F' : 'F11', @@ -138,7 +148,7 @@ const canExecuteRole = (role) => { if (!roles.hasOwnProperty(role)) return false if (process.platform !== 'darwin') return true // macOS handles all roles natively except the ones listed below - return ['zoomin', 'zoomout', 'resetzoom'].includes(role) + return ['reload', 'resetzoom', 'toggledevtools', 'zoomin', 'zoomout'].includes(role) } exports.getDefaultLabel = (role) => { diff --git a/lib/browser/rpc-server.js b/lib/browser/rpc-server.js index 54868b21d7..e525464155 100644 --- a/lib/browser/rpc-server.js +++ b/lib/browser/rpc-server.js @@ -363,6 +363,11 @@ ipcMain.on('ELECTRON_BROWSER_MEMBER_SET', function (event, id, name, value) { ipcMain.on('ELECTRON_BROWSER_MEMBER_GET', function (event, id, name) { try { let obj = objectsRegistry.get(id) + + if (obj == null) { + throwRPCError(`Cannot get property '${name}' on missing remote object ${id}`) + } + event.returnValue = valueToMeta(event.sender, obj[name]) } catch (error) { event.returnValue = exceptionToMeta(error)