Не удается передать переменную, определенную в основном процессе, в средство визуализации BrowserView с включенной contextIsolation? - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь создать пользовательское меню / строку заголовка, но я добавляю его в основное окно BrowserWindow, используя BrowserView, а не просто метод BrowserWindow.loadURL() (по причинам).

Кажется, это вызывает проблемы с загрузкой сценария предварительной загрузки, когда включена изоляция контекста.

Что у меня есть:

main. js

const mainWindow = new BrowserWindow({
    frame: false,
    webPreferences: {
        nodeIntegration: false,
        contextIsolation: true,
        preload: path.join(__dirname, "preload.js")
    }
})

const bView = new BrowserView();
bView.setBounds(//set my bounds);
bView.webContext.loadURL(path.join(__dirname, "menu.html"));

mainWindow.setBrowserView(bView);

preload. js

const { remote } = require('electron')
window.mainWindow = remote.getCurrentWindow();

В сценарии рендеринга:

console.log(window.mainWindow); // undefined

Мне кажется, я понимаю, почему он не определен, но мне не ясно, как, если возможно, совместно использовать основную переменную процесса с процессом рендеринга.

Я пробовал то, что упоминалось здесь (с использованием webFrame.executeJavaScript()), но это, похоже, ничего не делает (и я даже не уверен, что webFrame должно быть).

Все работает нормально, если я просто загружаю меню. html с использованием mainWindow.loadURL(filePath), но я не хочу этого делать.

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Ну, я разобрался в своей проблеме:

Я загружал скрипт предварительной загрузки в BrowserWindow. Мне нужно было загрузить его в BrowserView, и тогда он заработал.

0 голосов
/ 22 января 2020

contextBridge.exposeInMainWorld - это интерфейс, позволяющий осуществлять связь между предварительной загрузкой и контекстом визуализации, когда включена контекстная изоляция. https://www.electronjs.org/docs/api/context-bridge#contextbridgeexposeinmainworldapikey -api-экспериментальный

Но также следует отметить, что он не сможет пересылать не сериализуемый объект, возможно, включая удаленный объект. Кроме того, обнажение всего объекта с помощью удаленного доступа является большой дырой в безопасности, которая в любом случае препятствует изоляции контекста. Вы также можете обратиться к запланированному обсуждению устаревания для удаленного модуля: https://github.com/electron/electron/issues/21408

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...