webFrameMain
Управление веб-страницами и фреймами.
Процесс: Основной
Модуль webFrameMain может использоваться для поиска фреймов в существующих экземплярах WebContents. Типичный случай использования — события навигации.
const { BrowserWindow, webFrameMain } = require('electron')
const win = new BrowserWindow({ width: 800, height: 1500 })
win.loadURL('https://twitter.com')
win.webContents.on(
'did-frame-navigate',
(event, url, httpResponseCode, httpStatusText, isMainFrame, frameProcessId, frameRoutingId) => {
const frame = webFrameMain.fromId(frameProcessId, frameRoutingId)
if (frame) {
const code = 'document.body.innerHTML = document.body.innerHTML.replaceAll("heck", "h*ck")'
frame.executeJavaScript(code)
}
}
)
Вы также можете получить доступ к фреймам существующих страниц, используя свойство mainFrame экземпляра WebContents.
const { BrowserWindow } = require('electron')
async function main () {
const win = new BrowserWindow({ width: 800, height: 600 })
await win.loadURL('https://reddit.com')
const youtubeEmbeds = win.webContents.mainFrame.frames.filter((frame) => {
try {
const url = new URL(frame.url)
return url.host === 'www.youtube.com'
} catch {
return false
}
})
console.log(youtubeEmbeds)
}
main()
Методы
К этим методам можно получить доступ из модуля webFrameMain:
webFrameMain.fromId(processId, routingId)
-
processIdЦелое число -Integer, представляющее внутренний идентификатор процесса, которому принадлежит фрейм. -
routingIdЦелое число -Integer, представляющее уникальный идентификатор фрейма в текущем процессе рендеринга. Идентификаторы маршрутизации можно получить из экземпляровWebFrameMain(frame.routingId) и они также передаются событиями навигации, специфичными для фрейма (например,WebContents).
Возвращает WebFrameMain | undefined - фрейм с заданными идентификаторами процесса и маршрутизации, или undefined , если нет WebFrameMain, связанного с заданными идентификаторами.
Класс: WebFrameMain
Процесс: Основной
Этот класс не экспортируется из модуля 'electron'. Он доступен только в качестве значения, возвращаемого другими методами API Electron.
События экземпляра
Событие: 'dom-ready'
Выполняется при загрузке документа.
Методы экземпляра
frame.executeJavaScript(code[, userGesture])
-
codeстрока -
userGestureлогическое значение (необязательно) - По умолчаниюfalse.
Возвращает Promise<unknown> - промис, который выполняется с результатом выполненного кода или отклоняется, если выполнение выбросит ошибку или приведет к отклоненному промису.
Вычисляет code на странице.
В окне браузера некоторые HTML-API, такие как requestFullScreen, могут вызываться только с помощью жеста пользователя. Установка userGesture в true удалит это ограничение.
frame.reload()
Возвращает boolean - показывает, была ли успешно инициирована перезагрузка. Приводит к false только в том случае, если у фрейма нет истории.
frame.send(channel, ...args)
-
channelстрока -
...argsлюбой массив
Отправляет асинхронное сообщение в процесс рендеринга через channel, вместе с аргументами. Аргументы будут сериализованы с помощью алгоритма структурированного клонирования, точно так же, как postMessage, поэтому цепочки прототипов не будут включены. Отправка функций, промисов, символов, WeakMaps или WeakSets вызовет исключение.
Процесс рендеринга может обработать сообщение, прослушав channel с использованием модуля ipcRenderer.
frame.postMessage(channel, message, [transfer])
-
channelстрока -
messageлюбой -
transferMessagePortMain[] (необязательно)
Отправляет сообщение в процесс рендеринга, необязательно передавая права владения нулю или более [MessagePortMain][] объектов.
Переданные MessagePortMain объекты будут доступны в процессе рендеринга с помощью свойства ports переданного события. Когда они прибудут в процесс рендеринга, они станут нативными DOM MessagePort объектами.
Например:
// Main process
const { port1, port2 } = new MessageChannelMain()
webContents.mainFrame.postMessage('port', { message: 'hello' }, [port1])
// Renderer process
ipcRenderer.on('port', (e, msg) => {
const [port] = e.ports
// ...
})
Свойства экземпляра
frame.url Только для чтения
string представляющий текущий URL фрейма.
frame.top Только для чтения
WebFrameMain | null , представляющий верхний фрейм в иерархии фреймов, к которому относится frame.
frame.parent Только для чтения
WebFrameMain | null , представляющий родительский фрейм для frame, свойство будет null , если frame является верхним фреймом в иерархии фреймов.
frame.frames Только для чтения
WebFrameMain[] коллекция, содержащая непосредственных потомков frame.
frame.framesInSubtree Только для чтения
WebFrameMain[] коллекция, содержащая каждый фрейм в поддереве frame , включая сам фрейм. Это может быть полезно при обходе всех фреймов.
frame.frameTreeNodeId Только для чтения
Integer представляющее идентификатор внутреннего экземпляра FrameTreeNode фрейма. Этот идентификатор глобален для браузера и уникально идентифицирует фрейм, содержащий содержимое. Идентификатор фиксируется при создании фрейма и остается постоянным на протяжении всего жизненного цикла фрейма. При удалении фрейма идентификатор больше не используется.
frame.name Только для чтения
string , представляющее имя фрейма.
frame.osProcessId Только для чтения
Integer представляющий операционную систему pid процесса, которому принадлежит этот фрейм.
frame.processId Только для чтения
Integer представляющий внутренний pid Chromium процесса, которому принадлежит этот фрейм. Это не то же самое, что идентификатор процесса ОС; для его чтения используйте frame.osProcessId.
frame.routingId Только для чтения
Integer представляющий уникальный идентификатор фрейма в текущем процессе рендеринга. Различные экземпляры WebFrameMain , которые ссылаются на один и тот же базовый фрейм, будут иметь одинаковый routingId.
frame.visibilityState Только для чтения
string представляющий состояние видимости фрейма.
См. также, как API видимости страницы затрагивается другими API Electron.
© GitHub Inc.
Licensed under the MIT license.
https://www.electronjs.org/docs/latest/api/web-frame-main