Проблема с поиском кадров по ID маршрутизации в Electron 5 - PullRequest
1 голос
/ 17 мая 2019

Я работаю над проектом в Electron, где мне нужно будет получить доступ к загруженным пользователем страницам и выполнить некоторые манипуляции с их DOM. Я использую BrowserView, потому что, очевидно, он более производительный и содержит меньше ошибок, поэтому мой код инициализации BrowserView выглядит следующим образом:

let view = new BrowserView({
    webPreferences: {
        preload:  path.join(__dirname, 'preload.js'),
        nodeIntegration: false,
        contextIsolation: true,
        sandbox: true,
        enableRemoteModule: false,
        allowPopups: false
    }
})
win.setBrowserView(view)

Теперь мне нужно вставить определенный код JS в основной фрейм страницы, а также в фреймы. Для этого я сейчас используя прослушиватель did-frame-finish-load в основном процессе, например:

view.webContents.on("did-frame-finish-load", function (e, isMainFrame, frameProcessId, frameRoutingId) {
    view.webContents.send("from_mainland", {"command": "inject_code", "frameRoutingId": frameRoutingId, "isMainFrame": isMainFrame})
}); 

Этот метод позволил мне получить сообщение "from_mainland" в моем файле preload.js с использованием IPC, найти кадр по идентификатору маршрутизации, указанному в вызове, и вставьте необходимый код в соответствующий фрейм, вызвав для него executeJavaScript.

Хорошо работает в Electron 4.1.4. Однако вчера я попробовал его на другой машине, на которой установлен Electron 5.0.1, и все сломалось. По существу, Функция webFrame.findFrameByRoutingId возвращает ноль, когда я предоставляю ему идентификатор маршрутизации из вызова. Любые идеи о том, что вызывает эту проблему и как обойти это?

Спасибо!

ОБНОВЛЕНИЕ: Итак, я еще немного поработал над этим и обнаружил, что в Electron 5.0.1 вызовы findFrameByRoutingId и firstChild будут возвращать фреймы только в том случае, если они принадлежат одному домену, в противном случае вы получаете ноль, поэтому это выглядит как ошибка в электронном 5.

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