Spec-Zone.ru › Electron

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 любой
  • transfer MessagePortMain[] (необязательно)

Отправляет сообщение в процесс рендеринга, необязательно передавая права владения нулю или более [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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API