В настоящее время электрон 5.0 отказался от возможности использовать nativeWindowOpen
с nodeIntegration
, поэтому невозможно использовать ReactDOM.createPortal
для document.body, возвращаемого window.open
. Они не нашли обходного пути, и я попробовал все, что можно найти в других ответах, например:
- IPC возвращает узел DOM на
new remote.BrowserWindow
, он не отправляет обратно действительный узел DOM для подключения к
webContents.executeJavascript
с документом или телом (function(){ return window })()
приводит к зависанию процесса
Я просто не могу сделать эквивалент с помощью BrowserWindow:
// this is what works in Electron 4 with a warning see https://github.com/electron/electron/pull/15193
const container = window.open("about:blank", "someuniqueid"); // window = current main window
const stylesheet = document.createElement('link');
stylesheet.rel = 'stylesheet';
stylesheet.href = document.querySelector('link').href; // document = current main window
container.document.body.appendChild(stylesheet);
// [... edited for brevity]
return createPortal(
props.children(container), // children = render props, pass the window to the children
container.document.body
)
ничто не может вернуть действительный узел DOM из созданного окна. require('electron')
также не работает по понятным причинам (nodeIntegration всегда отключен)