electron/remote

enable(webContents) not working in preload script

sindbad75 opened this issue · 2 comments

Hello everyone.
I am new on electron and trying to update an electron project from v11.5.0 to latest version (or at least last 17 sub version).
My setup:
"node": "14.16"
"@electron/remote": "^2.0.8",
"electron": "^12.0.0", (same issue with 13.6.9 or 17.3.1)

I am facing an issue trying to move from enableRemoteModule (in BrowserWindow's webPreferences) to enable(webContents).
Here it is about a notification windows which should be opened and display the right content.
I stay on electron 12.0.0/13.6.9 in order to switch easily from one to the other.

Before (enableRemoteModule)

main:

win = new BrowserWindow({
   ...
    webPreferences: {
      webviewTag: true,
      enableRemoteModule: true,
      nativeWindowOpen: true,
      contextIsolation: false,
      preload: ...,
    }
  });

preload

  const win = new remote.BrowserWindow({
    ...,
    webPreferences: {
      enableRemoteModule: true,
      contextIsolation: false,
      preload: ...,
    }
  });

After (enable)

main:

import * as remoteMain from '@electron/remote/main';
[...]

win = new BrowserWindow({
   ...
    webPreferences: {
      webviewTag: true,
      nativeWindowOpen: true,
      contextIsolation: false,
      preload: ...,
    }
  });

  remoteMain.enable(win.webContents)

preload:

  const win = new remote.BrowserWindow({
    ...,
    webPreferences: {
      enableRemoteModule: true,
      contextIsolation: false,
      preload: ...,
    }
  });

remote.require("@electron/remote/main").enable(win.webContents);

I probably miss something important.
In preload.js, with enableRemoteModule: true, every thing works fine, my notification window open and is filled up with its content. Using enable, my notification window open but nothing is displayed in it. I do not have any console warning or error.
In main, using enable seems to work.

I guess it could be related to an initialization issue.

I do not know if it could help but I noticed that remoteMain.enable(win.webContents) in main returns null and remote.require("@electron/remote/main").enable(win.webContents) returns undefined in preload even if both emoteMain.enable and remote.require("@electron/remote/main").enable return the same exact function.

enable(webContents) is only work in main process

monhi commented

I also face this problem and could not resolve yet.
I need to enable @electron/remote in preload.js of webview tag