'setZoomLevelLimits'
]
+const webFrameMethodsWithResult = [
+ 'getZoomFactor',
+ 'getZoomLevel'
+]
+
// Add JavaScript wrappers for WebContents class.
const wrapWebContents = function (webContents) {
// webContents is an EventEmitter.
}
}
+ const asyncWebFrameMethods = function (requestId, method, callback, ...args) {
+ this.send('ELECTRON_INTERNAL_RENDERER_ASYNC_WEB_FRAME_METHOD', requestId, method, args)
+ ipcMain.once(`ELECTRON_INTERNAL_BROWSER_ASYNC_WEB_FRAME_RESPONSE_${requestId}`, function (event, result) {
+ console.info(callback);
+ if (callback) callback(result)
+ })
+ }
+
+ const syncWebFrameMethods = function (requestId, method, callback, ...args) {
+ this.send('ELECTRON_INTERNAL_RENDERER_SYNC_WEB_FRAME_METHOD', requestId, method, args)
+ ipcMain.once(`ELECTRON_INTERNAL_BROWSER_SYNC_WEB_FRAME_RESPONSE_${requestId}`, function (event, result) {
+ if (callback) callback(result)
+ })
+ }
+
// Mapping webFrame methods.
for (const method of webFrameMethods) {
webContents[method] = function (...args) {
}
}
- const asyncWebFrameMethods = function (requestId, method, callback, ...args) {
- this.send('ELECTRON_INTERNAL_RENDERER_ASYNC_WEB_FRAME_METHOD', requestId, method, args)
- ipcMain.once(`ELECTRON_INTERNAL_BROWSER_ASYNC_WEB_FRAME_RESPONSE_${requestId}`, function (event, result) {
- if (callback) callback(result)
- })
+ for (const method of webFrameMethodsWithResult) {
+ webContents[method] = function (...args) {
+ const callback = args[args.length - 1]
+ const actualArgs = args.slice(0, args.length - 2)
+ syncWebFrameMethods.call(this, getNextId(), method, callback, ...actualArgs)
+ }
}
// Make sure webContents.executeJavaScript would run the code only when the
electron.webFrame[method].apply(electron.webFrame, args)
})
+electron.ipcRenderer.on('ELECTRON_INTERNAL_RENDERER_SYNC_WEB_FRAME_METHOD', (event, requestId, method, args) => {
+ const result = electron.webFrame[method].apply(electron.webFrame, args)
+ event.sender.send(`ELECTRON_INTERNAL_BROWSER_SYNC_WEB_FRAME_RESPONSE_${requestId}`, result)
+})
+
electron.ipcRenderer.on('ELECTRON_INTERNAL_RENDERER_ASYNC_WEB_FRAME_METHOD', (event, requestId, method, args) => {
const responseCallback = function (result) {
event.sender.send(`ELECTRON_INTERNAL_BROWSER_ASYNC_WEB_FRAME_RESPONSE_${requestId}`, result)