webContents
Отображение и управление веб-страницами.
Процесс: Основной
webContents — это EventEmitter. Он отвечает за отображение и управление веб-страницей и является свойством объекта BrowserWindow. Пример доступа к объекту webContents.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 1500 })
win.loadURL('http://github.com')
const contents = win.webContents
console.log(contents)
Методы
Эти методы доступны из модуля webContents:
const { webContents } = require('electron')
console.log(webContents)
webContents.getAllWebContents()
Возвращает WebContents[] — массив всех WebContents экземпляров. Он будет содержать содержимое веб-страниц для всех окон, веб-вью, открытых инструментов разработчика и страниц расширения инструментов разработчика.
webContents.getFocusedWebContents()
Возвращает WebContents | null — содержимое веб-страницы, на которой сфокусирован этот процесс, в противном случае возвращает null.
webContents.fromId(id)
-
idЦелое число
Возвращает WebContents | undefined — экземпляр WebContents с заданным идентификатором или undefined , если нет WebContents, связанного с этим идентификатором.
webContents.fromDevToolsTargetId(targetId)
-
targetIdстрока - TargetID протокола Chrome DevTools TargetID, связанный с экземпляром WebContents.
Возвращает WebContents | undefined — экземпляр WebContents с заданным TargetID или undefined , если нет WebContents, связанного с этим TargetID.
При взаимодействии с протоколом Chrome DevTools может быть полезно найти экземпляр WebContents по его присвоенному TargetID.
async function lookupTargetId (browserWindow) {
const wc = browserWindow.webContents
await wc.debugger.attach('1.3')
const { targetInfo } = await wc.debugger.sendCommand('Target.getTargetInfo')
const { targetId } = targetInfo
const targetWebContents = await webContents.fromDevToolsTargetId(targetId)
}
Класс: WebContents
Отображение и управление содержимым экземпляра BrowserWindow.
Процесс: Основной
Этот класс не экспортируется из модуля 'electron'. Он доступен только в качестве возвращаемого значения других методов API Electron.
События экземпляра
Событие: 'did-finish-load'
Вызывается, когда навигация завершена, т.е. индикатор загрузки вкладки перестал вращаться, и событие onload было отправлено.
Событие: 'did-fail-load'
Возвращает:
-
eventСобытие -
errorCodeЦелое число -
errorDescriptionстрока -
validatedURLстрока -
isMainFrameлогическое значение -
frameProcessIdЦелое число -
frameRoutingIdЦелое число
Это событие подобно did-finish-load, но вызывается, когда загрузка завершилась неудачей. Полный список кодов ошибок и их значений доступен здесь.
Событие: 'did-fail-provisional-load'
Возвращает:
-
eventСобытие -
errorCodeЦелое число -
errorDescriptionстрока -
validatedURLстрока -
isMainFrameлогическое значение -
frameProcessIdЦелое число -
frameRoutingIdЦелое число
Это событие подобно did-fail-load, но вызывается, когда загрузка была отменена (например, был вызван window.stop()).
Событие: 'did-frame-finish-load'
Возвращает:
-
eventСобытие -
isMainFrameлогическое значение -
frameProcessIdЦелое число -
frameRoutingIdЦелое число
Вызывается, когда фрейм завершает навигацию.
Событие: 'did-start-loading'
Соответствует моментам времени, когда индикатор загрузки вкладки начал вращаться.
Событие: 'did-stop-loading'
Соответствует моментам времени, когда индикатор загрузки вкладки перестал вращаться.
Событие: 'dom-ready'
Возвращает:
-
eventСобытие
Вызывается, когда документ в фрейме верхнего уровня загружен.
Событие: 'page-title-updated'
Возвращает:
-
eventСобытие -
titleстрока -
explicitSetлогическое значение
Вызывается при установке заголовка страницы во время навигации. explicitSet равно false, когда заголовок синтезируется из URL файла.
Событие: 'page-favicon-updated'
Возвращает:
-
eventСобытие -
faviconsстроковый массив — массив URL-адресов.
Вызывается, когда страница получает URL-адреса значков.
Событие: 'new-window' Устаревший
Возвращает:
-
eventNewWindowWebContentsEvent -
urlстрока -
frameNameстрока -
dispositionстрока — Может бытьdefault,foreground-tab,background-tab,new-window,save-to-diskиother. -
additionalFeaturesстроковый массив — нестандартные функции (функции, не обрабатываемые Chromium или Electron), переданныеwindow.open(). Устаревший, и теперь всегда будет пустым массивом[]. -
referrerReferrer — referrer, который будет передан новому окну. Может или не может привести к отправке заголовкаReferer, в зависимости от политики referrer. -
postBodyPostBody (необязательно) — данные POST, которые будут отправлены в новое окно вместе с соответствующими заголовками. Если данные POST не нужно отправлять, значение будетnull. Определяется только при создании окна формой, которая установилаtarget=_blank.
Устарело в пользу webContents.setWindowOpenHandler.
Вызывается, когда страница запрашивает открытие нового окна для url. Может быть запрошено window.open или внешней ссылкой, например <a target='_blank'>.
По умолчанию для url создается новое BrowserWindow.
Вызов event.preventDefault() предотвратит автоматическое создание нового BrowserWindow Electron. Если вы вызовете event.preventDefault() и вручную создадите новое BrowserWindow, то должны установить event.newGuest для ссылки на новый экземпляр BrowserWindow. Отсутствие этого может привести к неожиданному поведению. Например:
myBrowserWindow.webContents.on('new-window', (event, url, frameName, disposition, options, additionalFeatures, referrer, postBody) => {
event.preventDefault()
const win = new BrowserWindow({
webContents: options.webContents, // use existing webContents if provided
show: false
})
win.once('ready-to-show', () => win.show())
if (!options.webContents) {
const loadOptions = {
httpReferrer: referrer
}
if (postBody != null) {
const { data, contentType, boundary } = postBody
loadOptions.postData = postBody.data
loadOptions.extraHeaders = `content-type: ${contentType}; boundary=${boundary}`
}
win.loadURL(url, loadOptions) // existing webContents will be navigated automatically
}
event.newGuest = win
})
Событие: 'did-create-window'
Возвращает:
-
windowBrowserWindow -
detailsОбъект-
urlstring — URL созданного окна. -
frameNamestring — Имя, присвоенное созданному окну в вызовеwindow.open(). -
referrerReferrer — Ссылка, которая будет передана новому окну. Может или не может привести к отправке заголовкаReferer, в зависимости от политики ссылки. -
postBodyPostBody (необязательно) — Данные POST, которые будут отправлены в новое окно вместе с соответствующими заголовками. Если данные POST не нужно отправлять, значение будетnull. Определяется только при создании окна с помощью формы, которая установилаtarget=_blank. -
dispositionstring — Может бытьdefault,foreground-tab,background-tab,new-window,save-to-diskиother.
-
Имеет место после успешного создания окна через window.open в рендере. Не излучается, если создание окна отменено из webContents.setWindowOpenHandler.
Дополнительные сведения и способы использования в сочетании с webContents.setWindowOpenHandler см. в window.open().
Событие: 'will-navigate'
Возвращает:
-
eventСобытие -
urlstring
Издается, когда пользователь или страница хотят начать навигацию. Это может произойти при изменении объекта window.location или щелчке пользователем ссылки на странице.
Это событие не будет излучаться при программной инициации навигации с помощью API, таких как webContents.loadURL и webContents.back.
Также оно не издается для навигации внутри страницы, например, при нажатии на ссылки-якоря или обновлении window.location.hash. Для этой цели используйте событие did-navigate-in-page.
Вызов event.preventDefault() предотвратит навигацию.
Событие: 'did-start-navigation'
Возвращает:
-
eventСобытие -
urlstring -
isInPlaceboolean -
isMainFrameboolean -
frameProcessIdЦелое число -
frameRoutingIdЦелое число
Издается, когда любое окно (включая основное) начинает навигацию. isInPlace будет true для навигации внутри страницы.
Событие: 'will-redirect'
Возвращает:
-
eventСобытие -
urlstring -
isInPlaceboolean -
isMainFrameboolean -
frameProcessIdЦелое число -
frameRoutingIdЦелое число
Издается при перенаправлении со стороны сервера во время навигации. Например, перенаправление 302.
Это событие будет издано после did-start-navigation и всегда перед событием did-redirect-navigation для той же навигации.
Вызов event.preventDefault() предотвратит навигацию (а не только перенаправление).
Событие: 'did-redirect-navigation'
Возвращает:
-
eventСобытие -
urlstring -
isInPlaceboolean -
isMainFrameboolean -
frameProcessIdЦелое число -
frameRoutingIdЦелое число
Издается после перенаправления со стороны сервера во время навигации. Например, перенаправление 302.
Это событие нельзя предотвратить. Если вы хотите предотвратить перенаправления, обратитесь к событию will-redirect выше.
Событие: 'did-navigate'
Возвращает:
-
eventСобытие -
urlstring -
httpResponseCodeЦелое число — -1 для навигаций, не относящихся к HTTP -
httpStatusTextstring — пустая строка для навигаций, не относящихся к HTTP
Издается при завершении навигации основного фрейма.
Это событие не издается при навигации внутри страницы, например, при нажатии на ссылки-якоря или обновлении window.location.hash. Для этой цели используйте событие did-navigate-in-page.
Событие: 'did-frame-navigate'
Возвращает:
-
eventСобытие -
urlstring -
httpResponseCodeЦелое число — -1 для навигаций, не относящихся к HTTP -
httpStatusTextstring — пустая строка для навигаций, не относящихся к HTTP, -
isMainFrameboolean -
frameProcessIdЦелое число -
frameRoutingIdЦелое число
Издается при завершении навигации любого фрейма.
Это событие не издается при навигации внутри страницы, например, при нажатии на ссылки-якоря или обновлении window.location.hash. Для этой цели используйте событие did-navigate-in-page.
Событие: 'did-navigate-in-page'
Возвращает:
-
eventСобытие -
urlstring -
isMainFrameboolean -
frameProcessIdЦелое число -
frameRoutingIdЦелое число
Издается при навигации внутри страницы в любом фрейме.
При навигации внутри страницы URL страницы изменяется, но не происходит навигации за пределы страницы. Примеры таких ситуаций — нажатие на ссылки-якоря или срабатывание события hashchange DOM.
Событие: 'will-prevent-unload'
Возвращает:
-
eventСобытие
Издается, когда обработчик события beforeunload пытается отменить загрузку страницы.
Вызов event.preventDefault() проигнорирует обработчик события beforeunload и позволит загрузить страницу.
const { BrowserWindow, dialog } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.webContents.on('will-prevent-unload', (event) => {
const choice = dialog.showMessageBoxSync(win, {
type: 'question',
buttons: ['Leave', 'Stay'],
title: 'Do you want to leave this site?',
message: 'Changes you made may not be saved.',
defaultId: 0,
cancelId: 1
})
const leave = (choice === 0)
if (leave) {
event.preventDefault()
}
})
Примечание: Это событие будет издано для BrowserViews , но не будет учтено — это потому, что мы не связываем жизненный цикл BrowserView с его собственным BrowserWindow, если он есть, в соответствии со спецификацией.
Событие: 'crashed' Устаревшее
Возвращает:
-
eventСобытие -
killedboolean
Издается при сбое или завершении процесса рендеринга.
Устаревшее: Это событие заменено событием render-process-gone , которое содержит более подробную информацию о причинах исчезновения процесса рендеринга. Это не всегда связано с ошибкой. Логическое значение killed можно заменить проверкой reason === 'killed' при переключении на это событие.
Событие: 'render-process-gone'
Возвращает:
-
eventСобытие -
detailsОбъект-
reasonstring — Причина исчезновения процесса рендеринга. Возможные значения:-
clean-exit— Процесс завершился с кодом выхода 0 -
abnormal-exit— Процесс завершился с ненулевым кодом выхода -
killed— Процесс был завершён внешним сигналом SIGTERM или иным образом -
crashed— Процесс завершился с ошибкой -
oom— Процесс завершился из-за нехватки памяти -
launch-failed— Процесс не был успешно запущен -
integrity-failure— Проверка целостности кода Windows завершилась ошибкой
-
-
exitCodeЦелое число — Код выхода процесса, еслиreasonимеет значениеlaunch-failed, в таком случаеexitCodeбудет платформенно-специфическим кодом ошибки запуска.
-
Издается, когда процесс рендеринга неожиданно завершается. Обычно это происходит из-за сбоя или завершения процесса.
Событие: 'unresponsive'
Издается, когда веб-страница становится неотзывчивой.
Событие: 'responsive'
Издается, когда неотзывчивая веб-страница становится отзывчивой вновь.
Событие: 'plugin-crashed'
Возвращает:
-
eventСобытие -
namestring -
versionstring
Издается, когда процесс плагина завершился с ошибкой.
Событие: 'destroyed'
Издается, когда webContents уничтожен.
Событие: 'before-input-event'
Возвращает:
-
eventСобытие -
inputОбъект - свойства ввода.-
typeстрока - ЛибоkeyUp, либоkeyDown. -
keyстрока - Эквивалент KeyboardEvent.key. -
codeстрока - Эквивалент KeyboardEvent.code. -
isAutoRepeatлогическое значение - Эквивалент KeyboardEvent.repeat. -
isComposingлогическое значение - Эквивалент KeyboardEvent.isComposing. -
shiftлогическое значение - Эквивалент KeyboardEvent.shiftKey. -
controlлогическое значение - Эквивалент KeyboardEvent.controlKey. -
altлогическое значение - Эквивалент KeyboardEvent.altKey. -
metaлогическое значение - Эквивалент KeyboardEvent.metaKey. -
locationчисло - Эквивалент KeyboardEvent.location. -
modifiersмассив строк - См. InputEvent.modifiers.
-
Выдаётся перед отправкой событий keydown и keyup на странице. Вызов event.preventDefault предотвратит события страницы keydown/keyup и сокращения меню.
Для предотвращения только сокращений меню используйте setIgnoreMenuShortcuts:
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.webContents.on('before-input-event', (event, input) => {
// For example, only enable application menu keyboard shortcuts when
// Ctrl/Cmd are down.
win.webContents.setIgnoreMenuShortcuts(!input.control && !input.meta)
})
Событие: 'enter-html-full-screen'
Выдается, когда окно переходит в полноэкранный режим, вызванный HTML API.
Событие: 'leave-html-full-screen'
Выдается, когда окно покидает полноэкранный режим, вызванный HTML API.
Событие: 'zoom-changed'
Возвращает:
-
eventСобытие -
zoomDirectionстрока - Может бытьinилиout.
Выдаётся, когда пользователь пытается изменить уровень масштабирования с помощью колесика мыши.
Событие: 'blur'
Выдаётся, когда WebContents теряет фокус.
Событие: 'focus'
Выдаётся, когда WebContents получает фокус.
Обратите внимание, что на macOS фокус означает, что WebContents является первым ответчиком окна, поэтому переключение фокуса между окнами не будет вызывать события focus и blur для WebContents, так как первый ответчик каждого окна не изменяется.
События focus и blur для WebContents следует использовать только для определения изменения фокуса между различными WebContents и BrowserView в одном окне.
Событие: 'devtools-opened'
Выдаётся при открытии DevTools.
Событие: 'devtools-closed'
Выдаётся при закрытии DevTools.
Событие: 'devtools-focused'
Выдаётся, когда DevTools получает фокус / открывается.
Событие: 'certificate-error'
Возвращает:
-
eventСобытие -
urlстрока -
errorстрока - Код ошибки. -
certificateСертификат -
callbackФункция-
isTrustedлогическое значение - Указывает, можно ли считать сертификат надёжным.
-
-
isMainFrameлогическое значение
Выдаётся при неудачной проверке certificate для url.
Использование аналогично событию certificate-error для app.
Событие: 'select-client-certificate'
Возвращает:
-
eventСобытие -
urlURL -
certificateListСертификат[] -
callbackФункция-
certificateСертификат - Должен быть сертификатом из указанного списка.
-
Выдаётся при запросе клиентского сертификата.
Использование аналогично событию select-client-certificate для app.
Событие: 'login'
Возвращает:
-
eventСобытие -
authenticationResponseDetailsОбъект-
urlURL
-
-
authInfoОбъект-
isProxyлогическое значение -
schemeстрока -
hostстрока -
portЦелое число -
realmстрока
-
-
callbackФункция-
usernameстрока (необязательно) -
passwordстрока (необязательно)
-
Выдаётся, когда webContents хочет выполнить аутентификацию basic.
Использование аналогично событию login для app.
Событие: 'found-in-page'
Возвращает:
-
eventСобытие -
resultОбъект-
requestIdЦелое число -
activeMatchOrdinalЦелое число - Позиция активного совпадения. -
matchesЦелое число - Количество совпадений. -
selectionAreaПрямоугольник - Координаты первой области совпадения. -
finalUpdateлогическое значение
-
Выдаётся, когда доступен результат запроса [webContents.findInPage].
Событие: 'media-started-playing'
Выдаётся, когда воспроизведение медиа начинается.
Событие: 'media-paused'
Выдаётся, когда воспроизведение медиа приостанавливается или завершается.
Событие: 'did-change-theme-color'
Возвращает:
-
eventСобытие -
color(строка | null) - Цвет темы в формате '#rrggbb'. Он равенnullпри отсутствии цвета темы.
Выдаётся, когда цвет темы страницы меняется. Обычно это происходит при встрече тега meta:
<meta name='theme-color' content='#ff0000'>
Событие: 'update-target-url'
Возвращает:
-
eventСобытие -
urlстрока
Выдаётся, когда курсор мыши перемещается над ссылкой или фокус клавиатуры перемещается на ссылку.
Событие: 'cursor-changed'
Возвращает:
-
eventСобытие -
typeстрока -
imageNativeImage (необязательно) -
scaleВещественное число (необязательно) - коэффициент масштабирования для пользовательского курсора. -
sizeРазмер (необязательно) - размерimage. -
hotspotТочка (необязательно) - координаты точки привязки пользовательского курсора.
Издаётся, когда тип курсора изменяется. Параметр type может быть default, crosshair, pointer, text, wait, help, e-resize, n-resize, ne-resize, nw-resize, s-resize, se-resize, sw-resize, w-resize, ns-resize, ew-resize, nesw-resize, nwse-resize, col-resize, row-resize, m-panning, e-panning, n-panning, ne-panning, nw-panning, s-panning, se-panning, sw-panning, w-panning, move, vertical-text, cell, context-menu, alias, progress, nodrop, copy, none, not-allowed, zoom-in, zoom-out, grab, grabbing или custom.
Если параметр type равен custom, параметр image будет содержать пользовательское изображение курсора в NativeImage, а scale, size и hotspot будут содержать дополнительную информацию о пользовательском курсоре.
Событие: 'context-menu'
Возвращает:
-
eventСобытие -
paramsОбъект-
xЦелое число - координата x. -
yЦелое число - координата y. -
frameWebFrameMain - Фрейм, из которого был вызван контекстное меню. -
linkURLстрока - URL ссылки, которая содержит узел, на котором было вызвано контекстное меню. -
linkTextстрока - Текст, связанный со ссылкой. Может быть пустой строкой, если содержимое ссылки - изображение. -
pageURLстрока - URL главной страницы, на которой было вызвано контекстное меню. -
frameURLстрока - URL подфрейма, на котором было вызвано контекстное меню. -
srcURLстрока - Исходный URL элемента, на котором было вызвано контекстное меню. Элементы с исходными URL - это изображения, аудио и видео. -
mediaTypeстрока - Тип узла, на котором было вызвано контекстное меню. Может бытьnone,image,audio,video,canvas,fileилиplugin. -
hasImageContentsлогическое значение - Указывает, было ли контекстное меню вызвано на изображении, содержащем непустые данные. -
isEditableлогическое значение - Указывает, является ли контекст редактируемым. -
selectionTextстрока - Текст выделения, на котором было вызвано контекстное меню. -
titleTextстрока - Текст заголовка выделения, на котором было вызвано контекстное меню. -
altTextстрока - Текст Alt выделения, на котором было вызвано контекстное меню. -
suggestedFilenameстрока - Предлагаемое имя файла для использования при сохранении файла через опцию «Сохранить ссылку как» контекстного меню. -
selectionRectПрямоугольник - Прямоугольник, представляющий координаты выделения в пространстве документа. -
selectionStartOffsetчисло - Начальная позиция текста выделения. -
referrerPolicyПолитика пересылки - Политика пересылки фрейма, на котором вызвано меню. -
misspelledWordстрока - Неправильно написанное слово под курсором, если оно есть. -
dictionarySuggestionsмассив строк - Массив предложенных слов для заменыmisspelledWord. Доступен только в случае неправильно написанного слова и включённого орфографического контроля. -
frameCharsetстрока - Кодировка символов фрейма, на котором было вызвано меню. -
inputFieldTypeстрока - Если контекстное меню было вызвано на поле ввода, тип этого поля. Возможные значения -none,plainText,password,other. -
spellcheckEnabledлогическое значение - Если контекст редактируемый, включён ли орфографический контроль. -
menuSourceTypeстрока - Источник ввода, который вызвал контекстное меню. Может бытьnone,mouse,keyboard,touch,touchMenu,longPress,longTap,touchHandle,stylus,adjustSelectionилиadjustSelectionReset. -
mediaFlagsОбъект - Флаги для элемента мультимедиа, на котором было вызвано контекстное меню.-
inErrorлогическое значение - Сообщает, завис ли элемент мультимедиа. -
isPausedлогическое значение - Сообщает, приостановлен ли элемент мультимедиа. -
isMutedлогическое значение - Сообщает, выключен ли звук элемента мультимедиа. -
hasAudioлогическое значение - Содержит ли элемент мультимедиа аудио. -
isLoopingлогическое значение - Сообщает, циклически ли повторяется элемент мультимедиа. -
isControlsVisibleлогическое значение - Сообщает, отображаются ли элементы управления для элемента мультимедиа. -
canToggleControlsлогическое значение - Сообщает, можно ли переключать элементы управления элемента мультимедиа. -
canPrintлогическое значение - Можно ли распечатать элемент мультимедиа. -
canSaveлогическое значение - Можно ли загрузить элемент мультимедиа. -
canShowPictureInPictureлогическое значение - Может ли элемент мультимедиа отображать режим «картинка в картинке». -
isShowingPictureInPictureлогическое значение - Отображается ли элемент мультимедиа в режиме «картинка в картинке». -
canRotateлогическое значение - Можно ли повернуть элемент мультимедиа. -
canLoopлогическое значение - Можно ли циклически повторять элемент мультимедиа.
-
-
editFlagsОбъект - Эти флаги указывают, считает ли рендерер, что может выполнить соответствующее действие.-
canUndoлогическое значение - Считает ли рендерер, что может отменить действие. -
canRedoлогическое значение - Считает ли рендерер, что может повторить действие. -
canCutлогическое значение - Считает ли рендерер, что может вырезать. -
canCopyлогическое значение - Считает ли рендерер, что может скопировать. -
canPasteлогическое значение - Считает ли рендерер, что может вставить. -
canDeleteлогическое значение - Считает ли рендерер, что может удалить. -
canSelectAllлогическое значение - Считает ли рендерер, что может выбрать всё. -
canEditRichlyлогическое значение - Считает ли рендерер, что может редактировать текст в формате HTML.
-
-
Издаётся, когда появляется новое контекстное меню, которое необходимо обработать.
Событие: 'select-bluetooth-device'
Возвращает:
-
eventСобытие -
devicesBluetoothDevice[] -
callbackФункция-
deviceIdстрока
-
Издаётся, когда необходимо выбрать устройство Bluetooth при вызове navigator.bluetooth.requestDevice. Для использования API webBluetooth должен быть включён navigator.bluetooth. Если event.preventDefault не вызывается, будет выбран первый доступный девайс. callback должен быть вызван с deviceId для выбора, передача пустой строки в callback отменит запрос.
Если для этого события не добавлено обработчик, все запросы Bluetooth будут отменены.
const { app, BrowserWindow } = require('electron')
let win = null
app.commandLine.appendSwitch('enable-experimental-web-platform-features')
app.whenReady().then(() => {
win = new BrowserWindow({ width: 800, height: 600 })
win.webContents.on('select-bluetooth-device', (event, deviceList, callback) => {
event.preventDefault()
const result = deviceList.find((device) => {
return device.deviceName === 'test'
})
if (!result) {
callback('')
} else {
callback(result.deviceId)
}
})
})
Событие: 'paint'
Возвращает:
-
eventСобытие -
dirtyRectПрямоугольник -
imageNativeImage - Данные изображения всего фрейма.
Издаётся, когда генерируется новый фрейм. В буфере передаётся только изменённая область.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ webPreferences: { offscreen: true } })
win.webContents.on('paint', (event, dirty, image) => {
// updateBitmap(dirty, image.getBitmap())
})
win.loadURL('http://github.com')
Событие: 'devtools-reload-page'
Издаётся, когда окно разработчика инструктирует webContents перезагрузить страницу
Событие: 'will-attach-webview'
Возвращает:
-
eventСобытие -
webPreferencesWebPreferences - Параметры веб-страницы, которые будут использоваться гостевой страницей. Этот объект можно изменить для настройки параметров гостевой страницы. -
paramsRecord<string, string> - Другие<webview>параметры, такие какsrcURL. Этот объект можно изменить для настройки параметров гостевой страницы.
Издаётся, когда содержимое веб-страницы <webview> подключается к этому содержимому веб-страницы. Вызов event.preventDefault() уничтожит гостевую страницу.
Это событие можно использовать для настройки webPreferences для webContents <webview> перед её загрузкой и предоставляет возможность задать настройки, которые нельзя задать через атрибуты <webview>.
Событие: 'did-attach-webview'
Возвращает:
-
eventСобытие -
webContentsWebContents - Содержимое гостевой веб-страницы, используемое<webview>.
Издаётся, когда <webview> подключена к данному содержимому веб-страницы.
Событие: 'console-message'
Возвращает:
-
eventСобытие -
levelЦелое число - Уровень ведения журнала, от 0 до 3. В порядке соответствуетverbose,info,warningиerror. -
messageстрока - Само сообщение консоли -
lineЦелое число - Номер строки источника, вызвавшего это сообщение консоли -
sourceIdстрока
Выпускается, когда связанное окно записывает сообщение консоли.
Событие: 'preload-error'
Возвращает:
-
eventСобытие -
preloadPathстрока -
errorОшибка
Выпускается, когда скрипт загрузки preloadPath выбрасывает необработанное исключение error.
Событие: 'ipc-message'
Возвращает:
-
eventСобытие -
channelстрока -
...argsany[]
Выпускается, когда процесс рендеринга отправляет асинхронное сообщение через ipcRenderer.send().
Событие: 'ipc-message-sync'
Возвращает:
-
eventСобытие -
channelстрока -
...argsany[]
Выпускается, когда процесс рендеринга отправляет синхронное сообщение через ipcRenderer.sendSync().
Событие: 'preferred-size-changed'
Возвращает:
-
eventСобытие -
preferredSizeРазмер - Минимальный размер, необходимый для размещения макета документа — без необходимости прокрутки.
Выпускается, когда WebContents предпочтительный размер изменился.
Это событие будет выпущено только тогда, когда enablePreferredSizeMode установлено в true в webPreferences.
Событие: 'frame-created'
Возвращает:
-
eventСобытие -
detailsОбъект-
frameWebFrameMain
-
Выпускается, когда mainFrame, <iframe>, или вложенный <iframe> загружается на странице.
Методы экземпляра
contents.loadURL(url[, options])
-
urlстрока
Возвращает Promise<void> — обещание выполнится, когда страница завершит загрузку (см. did-finish-load), и отклонится, если страница не загрузится (см. did-fail-load). Обработчик отклонения по умолчанию уже прикреплен, что предотвращает ошибки необработанного отклонения.
Загружает url в окне. url должен содержать префикс протокола, например, http:// или file://.
const { webContents } = require('electron')
const options = { extraHeaders: 'pragma: no-cache\n' }
webContents.loadURL('https://github.com', options)
contents.loadFile(filePath[, options])
-
filePathстрока
Возвращает Promise<void> — обещание выполнится, когда страница завершит загрузку (см. did-finish-load), и отклонится, если страница не загрузится (см. did-fail-load).
Загружает указанный файл в окно, filePath должен быть путем к HTML-файлу, относительно корня вашего приложения. Например, структура приложения подобна этой:
| root | - package.json | - src | - main.js | - index.html
Для этого потребуются код подобный этому
win.loadFile('src/index.html')
contents.downloadURL(url)
-
urlстрока
Инициализирует загрузку ресурса по адресу url без перехода. Событие will-download объекта session будет активировано.
contents.getURL()
Возвращает string — URL текущей веб-страницы.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('http://github.com').then(() => {
const currentURL = win.webContents.getURL()
console.log(currentURL)
})
contents.getTitle()
Возвращает string — заголовок текущей веб-страницы.
contents.isDestroyed()
Возвращает boolean — является ли веб-страница уничтоженной.
contents.focus()
Фокусирует веб-страницу.
contents.isFocused()
Возвращает boolean — имеет ли веб-страница фокус.
contents.isLoading()
Возвращает boolean — загружаются ли ресурсы веб-страницы.
contents.isLoadingMainFrame()
Возвращает boolean — загружается ли основной фрейм (а не только фреймы или фреймы внутри него).
contents.isWaitingForResponse()
Возвращает boolean — ожидает ли веб-страница первого ответа от основного ресурса страницы.
contents.stop()
Останавливает любые ожидающие переходы.
contents.reload()
Перезагружает текущую веб-страницу.
contents.reloadIgnoringCache()
Перезагружает текущую страницу, игнорируя кэш.
contents.canGoBack()
Возвращает boolean — может ли браузер вернуться к предыдущей веб-странице.
contents.canGoForward()
Возвращает boolean — может ли браузер перейти к следующей веб-странице.
contents.canGoToOffset(offset)
-
offsetЦелое число
Возвращает boolean — может ли веб-страница перейти к offset.
contents.clearHistory()
Очищает историю навигации.
contents.goBack()
Возвращает браузер к предыдущей веб-странице.
END_OF_DOCUMENT_MARKER
contents.goForward()
Переводит браузер вперёд на веб-страницу.
contents.goToIndex(index)
-
indexЦелое число
Перенаправляет браузер на указанный абсолютный индекс веб-страницы.
contents.goToOffset(offset)
-
offsetЦелое число
Переходит к указанному смещению от «текущей записи».
contents.isCrashed()
Возвращает boolean — Состояние зависания процесса рендеринга.
contents.forcefullyCrashRenderer()
Принудительно завершает процесс рендеринга, который в настоящее время отображает эту webContents. Это вызовет событие render-process-gone с reason=killed || reason=crashed. Обратите внимание, что некоторые webContents используют общие процессы рендеринга, поэтому вызов этого метода может также привести к зависанию хост-процесса для других webContents.
Вызов reload() сразу после вызова этого метода заставит перезагрузку произойти в новом процессе. Это следует использовать, когда этот процесс нестабилен или неприменим, например, для восстановления после события unresponsive.
contents.on('unresponsive', async () => {
const { response } = await dialog.showMessageBox({
message: 'App X has become unresponsive',
title: 'Do you want to try forcefully reloading the app?',
buttons: ['OK', 'Cancel'],
cancelId: 1
})
if (response === 0) {
contents.forcefullyCrashRenderer()
contents.reload()
}
})
contents.setUserAgent(userAgent)
-
userAgentстрока
Переопределяет пользовательский агент для этой веб-страницы.
contents.getUserAgent()
Возвращает string — пользовательский агент для этой веб-страницы.
contents.insertCSS(css[, options])
-
cssстрока
Возвращает Promise<string> — обещание, которое разрешается с ключом для вставленного CSS, который позже можно использовать для удаления CSS с помощью contents.removeInsertedCSS(key).
Вставляет CSS на текущую веб-страницу и возвращает уникальный ключ для вставленного стилевого листа.
contents.on('did-finish-load', () => {
contents.insertCSS('html, body { background-color: #f00; }')
})
contents.removeInsertedCSS(key)
-
keyстрока
Возвращает Promise<void> — разрешается, если удаление прошло успешно.
Удаляет вставленный CSS с текущей веб-страницы. Стилевой лист идентифицируется по его ключу, который возвращается из contents.insertCSS(css).
contents.on('did-finish-load', async () => {
const key = await contents.insertCSS('html, body { background-color: #f00; }')
contents.removeInsertedCSS(key)
})
contents.executeJavaScript(code[, userGesture])
-
codeстрока -
userGestureлогическое значение (необязательно) — По умолчаниюfalse.
Возвращает Promise<any> — обещание, которое разрешается с результатом выполненного кода или отклоняется, если результат кода — отклоненное обещание.
Вычисляет code на странице.
В окне браузера некоторые HTML-API, такие как requestFullScreen, могут вызываться только с помощью жеста пользователя. Установка userGesture в true устранит это ограничение.
Выполнение кода будет приостановлено до тех пор, пока загрузка веб-страницы не закончится.
contents.executeJavaScript('fetch("https://jsonplaceholder.typicode.com/users/1").then(resp => resp.json())', true)
.then((result) => {
console.log(result) // Will be the JSON object from the fetch call
})
contents.executeJavaScriptInIsolatedWorld(worldId, scripts[, userGesture])
-
worldIdЦелое число — ID мира для выполнения javascript,0— это мир по умолчанию,999— мир, используемый функцией Electron'scontextIsolation. Вы можете указать здесь любое целое число. -
scriptsWebSource[] -
userGestureлогическое значение (необязательно) — По умолчаниюfalse.
Возвращает Promise<any> — обещание, которое разрешается с результатом выполненного кода или отклоняется, если результат кода — отклоненное обещание.
Функционирует как executeJavaScript , но вычисляет scripts в изолированном контексте.
contents.setIgnoreMenuShortcuts(ignore)
-
ignoreлогическое значение
Игнорировать сочетания клавиш меню приложения, пока этот веб-контент фокусируется.
contents.setWindowOpenHandler(handler)
-
handlerФункция<{действие: 'отклонить'} | {действие: 'разрешить', параметрыОкнаБраузера?: BrowserWindowConstructorOptions}>-
detailsОбъект-
urlстрока — результирующая версия URL, переданногоwindow.open(). Например, открытие окна сwindow.open('foo')даст что-то вродеhttps://the-origin/the/current/path/foo. -
frameNameстрока — Имя окна, предоставленное вwindow.open() -
featuresстрока — Список параметров окна, разделенных запятыми, предоставленныхwindow.open(). -
dispositionстрока — Может бытьdefault,foreground-tab,background-tab,new-window,save-to-diskилиother. -
referrerReferrer — Указатель, который будет передан в новое окно. Может или не может привести к отправке заголовкаReferer, в зависимости от политики указателя. -
postBodyPostBody (необязательно) — Данные отправки, которые будут отправлены в новое окно вместе с соответствующими заголовками, которые будут установлены. Если данные отправки не должны отправляться, значение будетnull. Определяется только тогда, когда окно создается формой, которая установилаtarget=_blank.
-
Возвращает
{action: 'deny'} | {action: 'allow', overrideBrowserWindowOptions?: BrowserWindowConstructorOptions}—denyотменяет создание нового окна.allowпозволит создать новое окно. УказаниеoverrideBrowserWindowOptionsпозволяет настроить созданное окно. Возврат нераспознанного значения, такого как null, undefined или объект без распознанного значения 'action', приведет к ошибке в консоли и будет иметь тот же эффект, что и возврат{action: 'deny'}. -
Вызывается перед созданием окна, когда запрашивается новое окно рендером, например, с помощью window.open(), ссылки с target="_blank", нажатия на ссылку с нажатой клавишей Shift или отправки формы с <form target="_blank">. Подробнее см. window.open() и способ использования вместе с did-create-window.
contents.setAudioMuted(muted)
-
mutedлогическое значение
Выключить звук на текущей веб-странице.
contents.isAudioMuted()
Возвращает boolean — Состояние приглушения страницы.
contents.isCurrentlyAudible()
Возвращает boolean — Состояние воспроизведения аудио.
contents.setZoomFactor(factor)
-
factorДвойное значение — Коэффициент масштабирования; значение по умолчанию 1,0.
Изменяет коэффициент масштабирования на указанное значение. Коэффициент масштабирования — это процент масштабирования, делённый на 100, таким образом, 300% = 3,0.
Значение коэффициента должно быть больше 0,0.
contents.getZoomFactor()
Возвращает number — текущий коэффициент масштабирования.
contents.setZoomLevel(level)
-
levelчисло — Уровень масштабирования.
Изменяет уровень масштабирования на указанный уровень. Исходный размер равен 0, и каждое приращение выше или ниже соответствует увеличению или уменьшению масштаба на 20% по отношению к исходному размеру в пределах от 300% до 50% соответственно. Формула для этого: scale := 1.2 ^ level.
ПРИМЕЧАНИЕ: Политика масштабирования на уровне Chromium — same-origin, что означает, что уровень масштабирования для определённого домена распространяется на все экземпляры окон с тем же домена. Различие URL-адресов окон позволит масштабированию работать по окнам.
contents.getZoomLevel()
Возвращает number — текущий уровень масштабирования.
contents.setVisualZoomLevelLimits(minimumLevel, maximumLevel)
-
minimumLevelчисло -
maximumLevelчисло
Возвращает Promise<void>
Устанавливает максимальный и минимальный уровни масштабирования с помощью пинцета.
ПРИМЕЧАНИЕ: Визуальное масштабирование по умолчанию отключено в Electron. Чтобы его включить, вызовите:
contents.setVisualZoomLevelLimits(1, 3)
contents.undo()
Выполняет команду редактирования undo в веб-странице.
contents.redo()
Выполняет команду редактирования redo в веб-странице.
contents.cut()
Выполняет команду редактирования cut в веб-странице.
contents.copy()
Выполняет команду редактирования copy в веб-странице.
contents.copyImageAt(x, y)
-
xЦелое число -
yЦелое число
Копирует изображение в заданной позиции в буфер обмена.
contents.paste()
Выполняет команду редактирования paste в веб-странице.
contents.pasteAndMatchStyle()
Выполняет команду редактирования pasteAndMatchStyle в веб-странице.
contents.delete()
Выполняет команду редактирования delete в веб-странице.
contents.selectAll()
Выполняет команду редактирования selectAll в веб-странице.
contents.unselect()
Выполняет команду редактирования unselect в веб-странице.
contents.replace(text)
-
textстрока
Выполняет команду редактирования replace в веб-странице.
contents.replaceMisspelling(text)
-
textстрока
Выполняет команду редактирования replaceMisspelling в веб-странице.
contents.insertText(text)
-
textстрока
Возвращает Promise<void>
Вставляет text в фокусированный элемент.
contents.findInPage(text[, options])
-
textстрока - Текст для поиска, не должен быть пустым.
Возвращает Integer — идентификатор запроса.
Инициирует поиск всех совпадений text на веб-странице. Результаты запроса можно получить, подписавшись на событие found-in-page.
contents.stopFindInPage(action)
-
actionстрока - Указывает действие при завершении запроса [webContents.findInPage].-
clearSelection- Очистить выделение. -
keepSelection- Перевести выделение в обычное выделение. -
activateSelection- Сфокусировать и нажать на узел выделения.
-
Останавливает любой запрос findInPage для webContents с указанным action.
const { webContents } = require('electron')
webContents.on('found-in-page', (event, result) => {
if (result.finalUpdate) webContents.stopFindInPage('clearSelection')
})
const requestId = webContents.findInPage('api')
console.log(requestId)
contents.capturePage([rect])
-
rectПрямоугольник (необязательно) - Область страницы для захвата.
Возвращает Promise<NativeImage> — результат в виде NativeImage
Захватывает снимок страницы в пределах rect. Пропуск rect позволит захватить всю видимую страницу.
contents.isBeingCaptured()
Возвращает boolean — Захват страницы в данный момент. Возвращает true, если счётчик захвата больше 0.
contents.incrementCapturerCount([size, stayHidden, stayAwake])
-
sizeРазмер (необязательно) - Предпочтительный размер для захвата. -
stayHiddenлогическое значение (необязательно) - Скрыть страницу вместо её отображения. -
stayAwakeлогическое значение (необязательно) - Поддерживать систему активной вместо её перехода в спящий режим.
Увеличивает счётчик захвата на 1. Страница считается видимой, когда окно браузера скрыто, а счётчик захвата не равен нулю. Если вы хотите, чтобы страница оставалась скрытой, вы должны установить stayHidden в значение true.
Это также влияет на API видимости страницы.
contents.decrementCapturerCount([stayHidden, stayAwake])
-
stayHiddenлогическое значение (необязательно) - Сохранить страницу в скрытом состоянии, вместо видимого. -
stayAwakeлогическое значение (необязательно) - Поддерживать систему активной вместо её перехода в спящий режим.
Уменьшает счётчик захвата на 1. Страница перейдёт в скрытое или затенённое состояние, когда её окно браузера скрыто или затенёно, и счётчик захвата достигнет нуля. Если вы хотите уменьшить счётчик скрытых захватчиков, вы должны установить stayHidden в значение true.
contents.getPrinters() Устаревшая
Получить список системных принтеров.
Возвращает PrinterInfo[]
Устаревшая функция: Следует использовать новый API contents.getPrintersAsync.
contents.getPrintersAsync()
Получить список системных принтеров.
Возвращает Promise<PrinterInfo[]> — результат в виде PrinterInfo[]
contents.print([options], [callback])
-
callbackФункция (необязательно)-
successбулево - Указывает на успех вызова печати. -
failureReasonстрока - Описание ошибки, возвращаемое при ошибке печати.
-
При передаче пользовательской pageSize, Chromium пытается проверить минимальные значения, специфичные для платформы, для width_microns и height_microns. Ширина и высота должны быть не менее 353 микронов, но могут быть выше на некоторых операционных системах.
Печатает веб-страницу окна. Когда silent установлено в true, Electron выберет стандартный принтер системы, если deviceName пусто, и стандартные настройки печати.
Используйте page-break-before: always; CSS-стиль для принудительной печати на новой странице.
Пример использования:
const options = {
silent: true,
deviceName: 'My-Printer',
pageRanges: [{
from: 0,
to: 1
}]
}
win.webContents.print(options, (success, errorType) => {
if (!success) console.log(errorType)
})
contents.printToPDF(options)
Возвращает Promise<Buffer> - Разрешается сгенерированными данными PDF.
Печатает веб-страницу окна как PDF с настраиваемыми параметрами печати Chromium.
landscape будет проигнорировано, если используется CSS at-правило @page в веб-странице.
По умолчанию пустой options будет рассматриваться как:
{
marginsType: 0,
printBackground: false,
printSelectionOnly: false,
landscape: false,
pageSize: 'A4',
scaleFactor: 100
}
Используйте page-break-before: always; CSS-стиль для принудительной печати на новой странице.
Пример webContents.printToPDF:
const { BrowserWindow } = require('electron')
const fs = require('fs')
const path = require('path')
const os = require('os')
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('http://github.com')
win.webContents.on('did-finish-load', () => {
// Use default printing options
const pdfPath = path.join(os.homedir(), 'Desktop', 'temp.pdf')
win.webContents.printToPDF({}).then(data => {
fs.writeFile(pdfPath, data, (error) => {
if (error) throw error
console.log(`Wrote PDF successfully to ${pdfPath}`)
})
}).catch(error => {
console.log(`Failed to write PDF to ${pdfPath}: `, error)
})
})
contents.addWorkSpace(path)
-
pathстрока
Добавляет указанный путь в рабочее пространство DevTools. Должен использоваться после создания DevTools:
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
win.webContents.on('devtools-opened', () => {
win.webContents.addWorkSpace(__dirname)
})
contents.removeWorkSpace(path)
-
pathстрока
Удаляет указанный путь из рабочего пространства DevTools.
contents.setDevToolsWebContents(devToolsWebContents)
-
devToolsWebContentsWebContents
Использует devToolsWebContents как целевой WebContents для отображения DevTools.
devToolsWebContents не должен производить навигацию и не должен использоваться для других целей после вызова.
По умолчанию Electron управляет DevTools, создавая внутреннее WebContents с нативным представлением, над которым у разработчиков очень ограниченный контроль. С помощью метода setDevToolsWebContents разработчики могут использовать любое WebContents для отображения DevTools в нём, включая BrowserWindow, BrowserView и <webview> теги.
Обратите внимание, что закрытие DevTools не уничтожает devToolsWebContents, ответственность за уничтожение devToolsWebContents лежит на вызывающей стороне.
Пример отображения DevTools в теге <webview>:
<html>
<head>
<style type="text/css">
* { margin: 0; }
#browser { height: 70%; }
#devtools { height: 30%; }
</style>
</head>
<body>
<webview id="browser" src="https://github.com"></webview>
<webview id="devtools" src="about:blank"></webview>
<script>
const { ipcRenderer } = require('electron')
const emittedOnce = (element, eventName) => new Promise(resolve => {
element.addEventListener(eventName, event => resolve(event), { once: true })
})
const browserView = document.getElementById('browser')
const devtoolsView = document.getElementById('devtools')
const browserReady = emittedOnce(browserView, 'dom-ready')
const devtoolsReady = emittedOnce(devtoolsView, 'dom-ready')
Promise.all([browserReady, devtoolsReady]).then(() => {
const targetId = browserView.getWebContentsId()
const devtoolsId = devtoolsView.getWebContentsId()
ipcRenderer.send('open-devtools', targetId, devtoolsId)
})
</script>
</body>
</html>
// Main process
const { ipcMain, webContents } = require('electron')
ipcMain.on('open-devtools', (event, targetContentsId, devtoolsContentsId) => {
const target = webContents.fromId(targetContentsId)
const devtools = webContents.fromId(devtoolsContentsId)
target.setDevToolsWebContents(devtools)
target.openDevTools()
})
Пример отображения DevTools в BrowserWindow:
const { app, BrowserWindow } = require('electron')
let win = null
let devtools = null
app.whenReady().then(() => {
win = new BrowserWindow()
devtools = new BrowserWindow()
win.loadURL('https://github.com')
win.webContents.setDevToolsWebContents(devtools.webContents)
win.webContents.openDevTools({ mode: 'detach' })
})
contents.openDevTools([options])
Открывает DevTools.
Когда contents является тегом <webview> , mode будет detach по умолчанию. Явное указание пустого mode может принудительно использовать последнее состояние панели задач.
В Windows, если включен Windows Control Overlay, DevTools будут открыты с mode: 'detach'.
contents.closeDevTools()
Закрывает DevTools.
contents.isDevToolsOpened()
Возвращает boolean - открыты ли DevTools.
contents.isDevToolsFocused()
Возвращает boolean - фокусирован ли просмотр devtools.
contents.toggleDevTools()
Переключает инструменты разработчика.
contents.inspectElement(x, y)
-
xЦелое число -
yЦелое число
Начинает инспектирование элемента в позиции (x, y).
contents.inspectSharedWorker()
Открывает инструменты разработчика для контекста рабочего процесса общего использования.
contents.inspectSharedWorkerById(workerId)
-
workerIdстрока
Инспектирует рабочий процесс общего использования по его ID.
contents.getAllSharedWorkers()
Возвращает SharedWorkerInfo[] - информацию обо всех рабочих процессах общего использования.
contents.inspectServiceWorker()
Открывает инструменты разработчика для контекста рабочего процесса сервиса.
contents.send(channel, ...args)
-
channelстрока -
...argsлюбой массив
Отправляет асинхронное сообщение в процесс рендеринга через channel, вместе с аргументами. Аргументы будут сериализованы с помощью алгоритма структурированного клонирования, так же как и postMessage, поэтому цепочки прототипов не будут включены. Отправка функций, промисов, символов, WeakMaps или WeakSets приведет к исключению.
ПРИМЕЧАНИЕ: Отправка нестандартных типов JavaScript, таких как объекты DOM или специальные объекты Electron, приведет к исключению.
Процесс рендеринга может обработать сообщение, прослушав channel с модулем ipcRenderer.
Пример отправки сообщений из основного процесса в процесс рендеринга:
// In the main process.
const { app, BrowserWindow } = require('electron')
let win = null
app.whenReady().then(() => {
win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL(`file://${__dirname}/index.html`)
win.webContents.on('did-finish-load', () => {
win.webContents.send('ping', 'whoooooooh!')
})
})
<!-- index.html -->
<html>
<body>
<script>
require('electron').ipcRenderer.on('ping', (event, message) => {
console.log(message) // Prints 'whoooooooh!'
})
</script>
</body>
</html>
contents.sendToFrame(frameId, channel, ...args)
-
frameIdЦелое число | [число, число] - ID кадра для отправки или пара[processId, frameId], если кадр находится в другом процессе по отношению к главному. -
channelстрока -
...argsлюбой массив
Отправляет асинхронное сообщение в определённый кадр в процессе рендеринга через channel, вместе с аргументами. Аргументы будут сериализованы с помощью алгоритма структурированного клонирования, так же как и postMessage, поэтому цепочки прототипов не будут включены. Отправка функций, промисов, символов, WeakMaps или WeakSets приведет к исключению.
ПРИМЕЧАНИЕ: Отправка нестандартных типов JavaScript, таких как объекты DOM или специальные объекты Electron, приведет к исключению.
Процесс рендеринга может обработать сообщение, прослушав channel с модулем ipcRenderer.
Если вы хотите получить frameId заданного контекста рендеринга, используйте значение webFrame.routingId. Например:
// In a renderer process
console.log('My frameId is:', require('electron').webFrame.routingId)
Вы также можете получить доступ к frameId из всех входящих IPC-сообщений в основном процессе.
// In the main process
ipcMain.on('ping', (event) => {
console.info('Message came from frameId:', event.frameId)
})
contents.postMessage(channel, message, [transfer])
-
channelстрока -
messageлюбое значение -
transferMessagePortMain[] (необязательно)
Отправляет сообщение в процесс рендеринга, необязательно передавая владение нулю или более объектам [MessagePortMain].
Переданные MessagePortMain объекты будут доступны в процессе рендеринга через свойство ports испущенного события. По прибытии в рендере они будут объектами нативного DOM MessagePort.
Например:
// Main process
const { port1, port2 } = new MessageChannelMain()
webContents.postMessage('port', { message: 'hello' }, [port1])
// Renderer process
ipcRenderer.on('port', (e, msg) => {
const [port] = e.ports
// ...
})
contents.enableDeviceEmulation(parameters)
-
parametersОбъект-
screenPositionстрока - Укажите тип экрана для эмуляции (по умолчанию:desktop):-
desktop- Тип экрана для настольного компьютера. -
mobile- Тип экрана для мобильного устройства.
-
-
screenSizeРазмер - Установите эмулируемый размер экрана (screenPosition == мобильный). -
viewPositionТочка - Позиционируйте просмотр на экране (screenPosition == мобильный) (по умолчанию:{ x: 0, y: 0 }). -
deviceScaleFactorЦелое число - Установите коэффициент масштаба устройства (если ноль, используется исходный коэффициент масштаба устройства) (по умолчанию:0). -
viewSizeРазмер - Установите эмулируемый размер просмотра (пустое значение означает, что переопределения нет). -
scaleВещественное число - Масштаб эмулируемого просмотра внутри доступного пространства (не в режиме подгонки к просмотру) (по умолчанию:1).
-
Включить эмуляцию устройства с заданными параметрами.
contents.disableDeviceEmulation()
Отключить эмуляцию устройства, включенную с помощью webContents.enableDeviceEmulation.
contents.sendInputEvent(inputEvent)
-
inputEventMouseInputEvent | MouseWheelInputEvent | KeyboardInputEvent
Отправляет событие ввода event на страницу. Примечание: для того, чтобы sendInputEvent() работало, необходимо, чтобы содержащий содержимое BrowserWindow был сфокусирован.
contents.beginFrameSubscription([onlyDirty ,]callback)
-
onlyDirtyлогическое значение (необязательно) - по умолчаниюfalse. -
callbackФункция-
imageNativeImage -
dirtyRectПрямоугольник
-
Начинает подписку на события презентации и захват кадров, функция callback будет вызвана с callback(image, dirtyRect) при событии презентации.
image - экземпляр NativeImage, хранящий захваченный кадр.
dirtyRect - объект со свойствами x, y, width, height, описывающими, какая часть страницы была перерисована. Если onlyDirty установлено в значение true, image будет содержать только перерисованную область. onlyDirty по умолчанию равно false.
contents.endFrameSubscription()
Прекратить подписку на события презентации кадра.
contents.startDrag(item)
-
itemОбъект-
fileстрока - Путь к файлу, который перетаскивается. -
filesмассив строк (необязательно) - Пути к файлам, которые перетаскиваются. (filesпереопределит полеfile) -
iconNativeImage | строка - На macOS изображение должно быть непустым.
-
Устанавливает item в качестве перетаскиваемого элемента для текущей операции перетаскивания и отпускания, file - абсолютный путь к файлу, который перетаскивается, а icon - изображение, отображаемое под курсором при перетаскивании.
contents.savePage(fullPath, saveType)
-
fullPathstring - Абсолютный путь к файлу. -
saveTypestring - Укажите тип сохранения.-
HTMLOnly- Сохранить только HTML страницы. -
HTMLComplete- Сохранить полную страницу в формате HTML. -
MHTML- Сохранить полную страницу в формате MHTML.
-
Возвращает Promise<void> - разрешает, если страница сохранена.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
win.loadURL('https://github.com')
win.webContents.on('did-finish-load', async () => {
win.webContents.savePage('/tmp/test.html', 'HTMLComplete').then(() => {
console.log('Page was saved successfully.')
}).catch(err => {
console.log(err)
})
})
contents.showDefinitionForSelection() macOS
Отображает всплывающее окно словаря, которое ищет выбранное слово на странице.
contents.isOffscreen()
Возвращает boolean - Указывает, включено ли отображение вне экрана.
contents.startPainting()
Если отображение вне экрана включено и не происходит рисование, начать рисование.
contents.stopPainting()
Если отображение вне экрана включено и происходит рисование, остановить рисование.
contents.isPainting()
Возвращает boolean - Если отображение вне экрана включено, возвращает, происходит ли в данный момент рисование.
contents.setFrameRate(fps)
-
fpsЦелое число
Если отображение вне экрана включено, устанавливает частоту кадров на указанное число. Принимаются только значения от 1 до 240.
contents.getFrameRate()
Возвращает Integer - Если отображение вне экрана включено, возвращает текущую частоту кадров.
contents.invalidate()
Планирует полную перерисовку окна, в котором находится этот веб-контент.
Если отображение вне экрана включено, делает кадр недействительным и генерирует новый с помощью события 'paint'.
contents.getWebRTCIPHandlingPolicy()
Возвращает string - Возвращает политику обработки IP-адресов WebRTC.
contents.setWebRTCIPHandlingPolicy(policy)
-
policystring - Укажите политику обработки IP-адресов WebRTC.-
default- Раскрывает публичные и локальные IP-адреса пользователя. Это стандартное поведение. При использовании этой политики WebRTC имеет право перечислить все интерфейсы и привязать их, чтобы обнаружить публичные интерфейсы. -
default_public_interface_only- Раскрывает публичный IP-адрес пользователя, но не раскрывает локальный IP-адрес пользователя. При использовании этой политики WebRTC должен использовать только маршрут по умолчанию, используемый http. Это не раскрывает никакие локальные адреса. -
default_public_and_private_interfaces- Раскрывает публичные и локальные IP-адреса пользователя. При использовании этой политики WebRTC должен использовать только маршрут по умолчанию, используемый http. Это также раскрывает связанный адрес по умолчанию. Маршрут по умолчанию — это маршрут, выбранный ОС на конечной точке с несколькими подключениями. -
disable_non_proxied_udp- Не раскрывает публичные или локальные IP-адреса. При использовании этой политики WebRTC должен использовать только TCP для связи со сверстниками или серверами, если сервер прокси не поддерживает UDP.
-
Установка политики обработки IP-адресов WebRTC позволяет контролировать, какие IP-адреса раскрываются через WebRTC. Подробнее см. BrowserLeaks.
contents.getMediaSourceId(requestWebContents)
-
requestWebContentsWebContents - Веб-контент, которому будет зарегистрирован идентификатор.
Возвращает string - Идентификатор потока WebContents. Этот идентификатор можно использовать с navigator.mediaDevices.getUserMedia с помощью chromeMediaSource типа tab. Идентификатор ограничен веб-контентом, к которому он зарегистрирован, и действителен только 10 секунд.
contents.getOSProcessId()
Возвращает Integer - Идентификатор процесса операционной системы связанного процесса рендеринга.
contents.getProcessId()
Возвращает Integer - Внутренний идентификатор процесса Chromium связанного процесса рендеринга. Может быть сравнен с frameProcessId, переданным событиями навигации, специфичными для фрейма (например, did-frame-navigate).
contents.takeHeapSnapshot(filePath)
-
filePathstring - Путь к выходному файлу.
Возвращает Promise<void> - Указывает, успешно ли был создан снимок.
Создаёт снимок кучи V8 и сохраняет его в filePath.
contents.getBackgroundThrottling()
Возвращает boolean - Будет ли этот WebContents ограничивать анимацию и таймеры, когда страница переходит в фоновый режим. Это также влияет на API Page Visibility.
contents.setBackgroundThrottling(allowed)
-
allowedboolean
Управляет тем, будет ли этот WebContents ограничивать анимацию и таймеры, когда страница переходит в фоновый режим. Это также влияет на API Page Visibility.
contents.getType()
Возвращает string - тип веб-контента. Может быть backgroundPage, window, browserView, remote, webview или offscreen.
contents.setImageAnimationPolicy(policy)
-
policystring - Может бытьanimate,animateOnceилиnoAnimation.
Устанавливает политику анимации изображений для этого веб-контента. Политика влияет только на новые изображения, существующие изображения, которые в настоящее время анимируются, не затрагиваются. Это известное ограничение в Chromium, вы можете принудительно пересчитать анимацию изображений с помощью img.src = img.src, что приведет к отсутствию сетевого трафика, но обновит политику анимации.
Это соответствует функции доступности animationPolicy в Chromium.
Свойства экземпляра
contents.audioMuted
Свойство boolean, которое определяет, заглушен ли этот документ.
contents.userAgent
Свойство string, которое определяет пользовательский агент для этой веб-страницы.
contents.zoomLevel
Свойство number, которое определяет уровень масштабирования для этого веб-контента.
Исходный размер — 0, каждое увеличение или уменьшение соответствует масштабированию на 20% больше или меньше по умолчанию, соответственно, до пределов 300% и 50% от исходного размера. Формула для этого scale := 1.2 ^ level.
contents.zoomFactor
Свойство number, которое определяет коэффициент масштабирования для этого веб-контента.
Коэффициент масштабирования — это процент масштабирования, деленный на 100, поэтому 300% = 3,0.
contents.frameRate
Свойство Integer, которое устанавливает частоту кадров веб-контента на указанное число. Принимаются только значения от 1 до 240.
Применимо только если отображение вне экрана включено.
contents.id Только для чтения
Свойство Integer, представляющее уникальный идентификатор этого WebContents. Каждый идентификатор уникален среди всех WebContents экземпляров всего приложения Electron.
contents.session Только для чтения
Сессия, используемая этим webContents.
contents.hostWebContents Только для чтения
Экземпляр web-contents, который может владеть этим объектом.
contents.devToolsWebContents Только для чтения
Свойство, представляющее DevTools web-contents ассоциированные с заданным.
Примечание: Пользователи не должны хранить этот объект, так как он может стать недоступным после закрытия DevTools.
contents.debugger Только для чтения
Экземпляр отладчика для этого webContents.
contents.backgroundThrottling
Свойство, определяющее, будут ли замедлены анимации и таймеры в этом WebContents, когда страница переходит в фоновый режим. Это также влияет на API видимости страницы.
contents.mainFrame Только для чтения
Свойство, представляющее главную (верхнюю) фрейм-структуру страницы.
© GitHub Inc.
Licensed under the MIT license.
https://www.electronjs.org/docs/latest/api/web-contents