Сессия
Управление сессиями браузера, куки, кэшем, настройками прокси и т.д.
Процесс: Основной
Модуль session может использоваться для создания новых объектов Session.
Вы также можете получить доступ к session существующих страниц, используя свойство session объекта WebContents, или из модуля session.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('http://github.com')
const ses = win.webContents.session
console.log(ses.getUserAgent())
Методы
Модуль session имеет следующие методы:
session.fromPartition(partition[, options])
-
partitionстрока
Возвращает Session - Экземпляр сессии из partition строки. Если существует существующая сессия с тем же partition, то она будет возвращена; в противном случае будет создан новый экземпляр Session с options.
Если partition начинается с префикса persist:, страница будет использовать постоянную сессию, доступную всем страницам приложения с тем же partition. Если префикс persist: отсутствует, страница будет использовать сессию в оперативной памяти. Если partition пусто, будет возвращена стандартная сессия приложения.
Для создания Session с options, необходимо убедиться, что Session с partition никогда ранее не использовался. Изменить options существующего объекта Session невозможно.
Свойства
Модуль session имеет следующие свойства:
session.defaultSession
Объект Session, стандартный объект сессии приложения.
Класс: Сессия
Получение и установка свойств сессии.
Процесс: Основной
Этот класс не экспортируется модулем 'electron'. Он доступен только как возвращаемое значение других методов Electron API.
Вы можете создать объект Session в модуле session:
const { session } = require('electron')
const ses = session.fromPartition('persist:name')
console.log(ses.getUserAgent())
События экземпляра
Следующие события доступны для экземпляров Session:
Событие: 'will-download'
Возвращает:
-
eventСобытие -
itemЭлементЗагрузки -
webContentsWebContents
Выполняется, когда Electron собирается загрузить item в webContents.
Вызов event.preventDefault() отменит загрузку, и item не будет доступен в следующем цикле обработки.
const { session } = require('electron')
session.defaultSession.on('will-download', (event, item, webContents) => {
event.preventDefault()
require('got')(item.getURL()).then((response) => {
require('fs').writeFileSync('/somewhere', response.body)
})
})
Событие: 'extension-loaded'
Возвращает:
-
eventСобытие -
extensionРасширение
Выполняется после загрузки расширения. Это происходит всякий раз, когда расширение добавляется в набор "активных" расширений. Это включает:
- Загрузку расширений из
Session.loadExtension. - Перезагрузку расширений:
- после сбоя.
- если расширение запросило это (
chrome.runtime.reload()).
Событие: 'extension-unloaded'
Возвращает:
-
eventСобытие -
extensionРасширение
Выполняется после разгрузки расширения. Это происходит, когда вызывается Session.removeExtension.
Событие: 'extension-ready'
Возвращает:
-
eventСобытие -
extensionРасширение
Выполняется после загрузки расширения и инициализации всего необходимого состояния браузера для запуска страницы фонового процесса расширения.
Событие: 'preconnect'
Возвращает:
-
eventСобытие -
preconnectUrlстрока - URL, запрашиваемый для предварительного соединения рендером. -
allowCredentialsлогическое значение - Истинно, если рендер запрашивает включение учетных данных (подробнее см. спецификацию).
Выполняется, когда процесс рендеринга запрашивает предварительное соединение с URL-адресом, обычно из-за метки ресурса.
Событие: 'spellcheck-dictionary-initialized'
Возвращает:
-
eventСобытие -
languageCodeстрока - Код языка файла словаря
Выполняется, когда файл словаря hunspell был успешно инициализирован. Это происходит после загрузки файла.
Событие: 'spellcheck-dictionary-download-begin'
Возвращает:
-
eventСобытие -
languageCodeстрока - Код языка файла словаря
Выполняется при начале загрузки файла словаря hunspell
Событие: 'spellcheck-dictionary-download-success'
Возвращает:
-
eventСобытие -
languageCodeстрока - Код языка файла словаря
Выполняется после успешной загрузки файла словаря hunspell
Событие: 'spellcheck-dictionary-download-failure'
Возвращает:
-
eventСобытие -
languageCodeстрока - Код языка файла словаря
Выполняется при сбое загрузки файла словаря hunspell. Для получения подробностей о сбое необходимо собрать netlog и проверить запрос на загрузку.
Событие: 'select-hid-device'
Возвращает:
-
eventСобытие -
detailsОбъект-
deviceListHIDDevice[] -
frameWebFrameMain
-
-
callbackФункция-
deviceIdстрока | null (необязательно)
-
Выполняется, когда необходимо выбрать устройство HID при вызове navigator.hid.requestDevice. callback должен быть вызван с deviceId для выбора; отсутствие аргументов у callback отменяет запрос. Дополнительно, управление разрешениями на navigator.hid можно настроить с помощью ses.setPermissionCheckHandler(handler) и ses.setDevicePermissionHandler(handler).
const { app, BrowserWindow } = require('electron')
let win = null
app.whenReady().then(() => {
win = new BrowserWindow()
win.webContents.session.setPermissionCheckHandler((webContents, permission, requestingOrigin, details) => {
if (permission === 'hid') {
// Add logic here to determine if permission should be given to allow HID selection
return true
}
return false
})
// Optionally, retrieve previously persisted devices from a persistent store
const grantedDevices = fetchGrantedDevices()
win.webContents.session.setDevicePermissionHandler((details) => {
if (new URL(details.origin).hostname === 'some-host' && details.deviceType === 'hid') {
if (details.device.vendorId === 123 && details.device.productId === 345) {
// Always allow this type of device (this allows skipping the call to `navigator.hid.requestDevice` first)
return true
}
// Search through the list of devices that have previously been granted permission
return grantedDevices.some((grantedDevice) => {
return grantedDevice.vendorId === details.device.vendorId &&
grantedDevice.productId === details.device.productId &&
grantedDevice.serialNumber && grantedDevice.serialNumber === details.device.serialNumber
})
}
return false
})
win.webContents.session.on('select-hid-device', (event, details, callback) => {
event.preventDefault()
const selectedDevice = details.deviceList.find((device) => {
return device.vendorId === '9025' && device.productId === '67'
})
callback(selectedPort?.deviceId)
})
})
Событие: 'hid-device-added'
Возвращает:
-
eventСобытие -
detailsОбъект-
deviceHIDDevice[] -
frameWebFrameMain
-
Выполняется после вызова navigator.hid.requestDevice и выполнения select-hid-device если новое устройство становится доступным до вызова обратного вызова select-hid-device. Это событие предназначено для использования при использовании пользовательского интерфейса для запроса выбора устройства, чтобы интерфейс мог быть обновлён с новым добавленным устройством.
Событие: 'hid-device-removed'
Возвращает:
-
eventСобытие -
detailsОбъект-
deviceHIDDevice[] -
frameWebFrameMain
-
Издаётся после того, как был вызван navigator.hid.requestDevice, и select-hid-device был запущен, если устройство было удалено до вызова обратного вызова от select-hid-device. Это событие предназначено для использования при использовании пользовательского интерфейса для запроса выбора устройства, чтобы пользовательский интерфейс мог быть обновлён для удаления указанного устройства.
Событие: 'hid-device-revoked'
Возвращает:
-
eventСобытие -
detailsОбъект-
deviceHIDDevice[] -
originстрока (необязательно) - Происхождение, из которого было отозвано устройство.
-
Издаётся после того, как был вызван HIDDevice.forget(). Это событие может использоваться для поддержки сохранения разрешений в постоянном хранилище, когда используется setDevicePermissionHandler.
Событие: 'select-serial-port'
Возвращает:
-
eventСобытие -
portListSerialPort[] -
webContentsWebContents -
callbackФункция-
portIdстрока
-
Издаётся, когда требуется выбрать последовательный порт при вызове navigator.serial.requestPort. callback должен быть вызван с portId, который нужно выбрать, передача пустой строки в callback отменит запрос. Кроме того, разрешения на navigator.serial могут быть управляемы с помощью ses.setPermissionCheckHandler(handler) с разрешением serial.
const { app, BrowserWindow } = require('electron')
let win = null
app.whenReady().then(() => {
win = new BrowserWindow({
width: 800,
height: 600
})
win.webContents.session.setPermissionCheckHandler((webContents, permission, requestingOrigin, details) => {
if (permission === 'serial') {
// Add logic here to determine if permission should be given to allow serial selection
return true
}
return false
})
// Optionally, retrieve previously persisted devices from a persistent store
const grantedDevices = fetchGrantedDevices()
win.webContents.session.setDevicePermissionHandler((details) => {
if (new URL(details.origin).hostname === 'some-host' && details.deviceType === 'serial') {
if (details.device.vendorId === 123 && details.device.productId === 345) {
// Always allow this type of device (this allows skipping the call to `navigator.serial.requestPort` first)
return true
}
// Search through the list of devices that have previously been granted permission
return grantedDevices.some((grantedDevice) => {
return grantedDevice.vendorId === details.device.vendorId &&
grantedDevice.productId === details.device.productId &&
grantedDevice.serialNumber && grantedDevice.serialNumber === details.device.serialNumber
})
}
return false
})
win.webContents.session.on('select-serial-port', (event, portList, webContents, callback) => {
event.preventDefault()
const selectedPort = portList.find((device) => {
return device.vendorId === '9025' && device.productId === '67'
})
if (!selectedPort) {
callback('')
} else {
callback(selectedPort.portId)
}
})
})
Событие: 'serial-port-added'
Возвращает:
-
eventСобытие -
portSerialPort -
webContentsWebContents
Издаётся после того, как был вызван navigator.serial.requestPort, и select-serial-port был запущен, если новый последовательный порт стал доступен до вызова обратного вызова от select-serial-port. Это событие предназначено для использования при использовании пользовательского интерфейса для запроса выбора порта, чтобы пользовательский интерфейс мог быть обновлён с новым добавленным портом.
Событие: 'serial-port-removed'
Возвращает:
-
eventСобытие -
portSerialPort -
webContentsWebContents
Издаётся после того, как был вызван navigator.serial.requestPort, и select-serial-port был запущен, если последовательный порт был удалён до вызова обратного вызова от select-serial-port. Это событие предназначено для использования при использовании пользовательского интерфейса для запроса выбора порта, чтобы пользовательский интерфейс мог быть обновлён для удаления указанного порта.
Методы экземпляра
Следующие методы доступны для экземпляров Session:
ses.getCacheSize()
Возвращает Promise<Integer> - текущий размер кэша сеанса в байтах.
ses.clearCache()
Возвращает Promise<void> - разрешается, когда операция очистки кэша завершена.
Очищает HTTP-кэш сеанса.
ses.clearStorageData([options])
Возвращает Promise<void> - разрешается, когда данные хранилища были очищены.
ses.flushStorageData()
Записывает любые не записанные данные DOMStorage на диск.
ses.setProxy(config)
-
configОбъект-
modeстрока (необязательно) - Режим прокси. Должен быть одним изdirect,auto_detect,pac_script,fixed_serversилиsystem. Если не указано, будет определено автоматически на основе других указанных параметров.-
directВ прямом режиме все соединения создаются напрямую, без участия прокси. -
auto_detectВ режиме автоопределения конфигурация прокси определяется скриптом PAC, который можно загрузить по адресу http://wpad/wpad.dat. -
pac_scriptВ режиме скрипта PAC конфигурация прокси определяется скриптом PAC, который извлекается из URL, указанного вpacScript. Это режим по умолчанию, если указанpacScript. -
fixed_serversВ режиме фиксированных серверов конфигурация прокси задается вproxyRules. Это режим по умолчанию, если указанproxyRules. -
systemВ системном режиме конфигурация прокси берется из операционной системы. Обратите внимание, что системный режим отличается от установки отсутствия конфигурации прокси. В последнем случае Electron обращается к системным настройкам только если никакие параметры командной строки не влияют на конфигурацию прокси.
-
-
pacScriptстрока (необязательно) - URL, связанный с файлом PAC. -
proxyRulesстрока (необязательно) - Правила, указывающие, какие прокси использовать. -
proxyBypassRulesстрока (необязательно) - Правила, указывающие, какие URL должны обойти настройки прокси.
-
Возвращает Promise<void> - Разрешается, когда процесс настройки прокси завершён.
Настраивает настройки прокси.
Если mode не указано, pacScript и proxyRules предоставлены вместе, опция proxyRules игнорируется, и применяется конфигурация pacScript.
Вам может потребоваться ses.closeAllConnections закрыть текущие соединения, чтобы предотвратить повторное использование пули сокетов, использующих предыдущий прокси, будущими запросами.
proxyRules должно соответствовать правилам ниже:
proxyRules = schemeProxies[";"<schemeProxies>] schemeProxies = [<urlScheme>"="]<proxyURIList> urlScheme = "http" | "https" | "ftp" | "socks" proxyURIList = <proxyURL>[","<proxyURIList>] proxyURL = [<proxyScheme>"://"]<proxyHost>[":"<proxyPort>]
Например:
-
http=foopy:80;ftp=foopy2- Используйте HTTP-проксиfoopy:80для URLhttp://, и HTTP-проксиfoopy2:80для URLftp://. -
foopy:80- Используйте HTTP-проксиfoopy:80для всех URL. -
foopy:80,bar,direct://- Используйте HTTP-проксиfoopy:80для всех URL, переходя кbarеслиfoopy:80недоступен, и после этого не используйте прокси. -
socks4://foopy- Используйте SOCKS v4-проксиfoopy:1080для всех URL. -
http=foopy,socks5://bar.com- Используйте HTTP-проксиfoopyдля http-URL, и перейдите к SOCKS5-проксиbar.comеслиfoopyнедоступен. -
http=foopy,direct://- Используйте HTTP-проксиfoopyдля http-URL, и не используйте прокси, еслиfoopyнедоступен. -
http=foopy;socks=foopy2- Используйте HTTP-проксиfoopyдля http-URL, и используйтеsocks4://foopy2для всех остальных URL.
proxyBypassRules — это список правил, разделённых запятыми, описанный ниже:
-
[ URL_SCHEME "://" ] HOSTNAME_PATTERN [ ":" <port> ]Соответствует всем именам хостов, которые соответствуют шаблону HOSTNAME_PATTERN.
Примеры: "foobar.com", "foobar.com", ".foobar.com", "foobar.com:99", "https://x..y.com:99"
-
"." HOSTNAME_SUFFIX_PATTERN [ ":" PORT ]Сопоставляет определённое доменное окончание.
Примеры: ".google.com", ".com", "http://.google.com"
-
[ SCHEME "://" ] IP_LITERAL [ ":" PORT ]Сопоставляет URL, которые являются литералами IP-адресов.
Примеры: "127.0.1", "[0:0::1]", "[::1]", "http://[::1]:99"
-
IP_LITERAL "/" PREFIX_LENGTH_IN_BITSСопоставляет любой URL, который указывает на IP-литерал, который попадает в указанный диапазон. Диапазон IP задаётся с использованием нотации CIDR.
Примеры: "192.168.1.1/16", "fefe:13::abc/33".
-
<local>Сопоставляет локальные адреса. Значение
<local>— это соответствие хоста одному из: "127.0.0.1", "::1", "localhost".
ses.resolveProxy(url)
-
urlURL
Возвращает Promise<string> - Разрешается с информацией о прокси для url.
ses.forceReloadProxyConfig()
Возвращает Promise<void> — выполняется, когда все внутренние состояния службы прокси сброшены, и, если доступна, применяется последняя конфигурация прокси. Сценарий pac будет повторно получен из pacScript снова, если режим прокси pac_script.
ses.setDownloadPath(path)
-
pathстрока - Местоположение для загрузки.
Устанавливает каталог сохранения загрузок. По умолчанию, каталог загрузок будет Downloads в соответствующей папке приложения.
ses.enableNetworkEmulation(options)
Имитирует сеть с заданной конфигурацией для session.
// To emulate a GPRS connection with 50kbps throughput and 500 ms latency.
window.webContents.session.enableNetworkEmulation({
latency: 500,
downloadThroughput: 6400,
uploadThroughput: 6400
})
// To emulate a network outage.
window.webContents.session.enableNetworkEmulation({ offline: true })
ses.preconnect(options)
Предварительно устанавливает соединение с указанным количеством сокетов к источнику.
ses.closeAllConnections()
Возвращает Promise<void> — выполняется, когда все подключения закрыты.
Примечание: Это приведет к завершению/ошибке всех запросов, которые в данный момент выполняются.
ses.disableNetworkEmulation()
Отключает любую активную имитацию сети для session. Возвращает исходную конфигурацию сети.
ses.setCertificateVerifyProc(proc)
-
procФункция | null-
requestОбъект-
hostnameстрока -
certificateСертификат -
validatedCertificateСертификат -
isIssuedByKnownRootлогическое значение -true, если Chromium распознает корневой центр сертификации как стандартный корень. Если нет, то, вероятно, этот сертификат был сгенерирован прокси MITM, корень которого был установлен локально (например, корпоративным прокси). Необходимо доверять этому только еслиverificationResultOK. -
verificationResultстрока -OK, если сертификат доверен, в противном случае ошибка, напримерCERT_REVOKED. -
errorCodeЦелое число - Код ошибки.
-
-
callbackФункция-
verificationResultЦелое число - Значение может быть одним из кодов ошибок сертификата из здесь. Помимо кодов ошибок сертификата, можно использовать следующие специальные коды.-
0- Указывает на успех и отключает проверку Certificate Transparency. -
-2- Указывает на ошибку. -
-3- Использует результат проверки из Chromium.
-
-
-
Устанавливает процедуру проверки сертификата для session, proc будет вызываться с proc(request, callback) при каждом запросе проверки сертификата сервера. Вызов callback(0) принимает сертификат, вызов callback(-2) отклоняет его.
Вызов setCertificateVerifyProc(null) вернёт проверку сертификатов к значению по умолчанию.
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
win.webContents.session.setCertificateVerifyProc((request, callback) => {
const { hostname } = request
if (hostname === 'github.com') {
callback(0)
} else {
callback(-2)
}
})
ПРИМЕЧАНИЕ: Результат этой процедуры кэшируется службой сети.
ses.setPermissionRequestHandler(handler)
-
handlerФункция | null-
webContentsWebContents - WebContents, запрашивающий разрешение. Обратите внимание, что если запрос поступает от подрамки, вы должны использоватьrequestingUrlдля проверки источника запроса. -
permissionстрока - Тип запрошенного разрешения.-
clipboard-read- Запрос доступа для чтения из буфера обмена. -
media- Запрос доступа к устройствам мультимедиа, таким как камера, микрофон и динамики. -
display-capture- Запрос доступа для захвата экрана. -
mediaKeySystem- Запрос доступа к контенту, защищенному DRM. -
geolocation- Запрос доступа к текущему местоположению пользователя. -
notifications- Запрос создания уведомлений и возможности отображать их в системном трее пользователя. -
midi- Запрос доступа к MIDI в APIwebmidi. -
midiSysex- Запрос доступа к сообщениям системного эксклюзива в APIwebmidi. -
pointerLock- Запрос прямого интерпретирования движений мыши как метода ввода. Чтобы узнать больше, перейдите сюда. -
fullscreen- Запрос ввода приложения в полноэкранный режим. -
openExternal- Запрос открытия ссылок в сторонних приложениях. -
unknown- Неизвестный запрос на разрешение
-
-
callbackФункция-
permissionGrantedлогическое значение - Разрешить или запретить разрешение.
-
-
detailsОбъект - Некоторые свойства доступны только для определенных типов разрешений.-
externalURLстрока (необязательно) - URL запросаopenExternal. -
securityOriginстрока (необязательно) - Безопасный источник запросаmedia. -
mediaTypesстрока[] (необязательно) - Типы доступа к медиа, запрашиваемые элементы, могут бытьvideoилиaudio -
requestingUrlстрока - Последний URL, загруженный запрашиваемой рамкой. -
isMainFrameлогическое значение - Является ли рамка, делающая запрос, главной рамой
-
-
Устанавливает обработчик, который можно использовать для ответа на запросы разрешения для session. Вызов callback(true) разрешит разрешение, а вызов callback(false) отклонит его. Для удаления обработчика вызовите setPermissionRequestHandler(null). Обратите внимание, что вы также должны реализовать setPermissionCheckHandler для получения полного управления разрешениями. Большинство веб-API проверяют разрешение и затем делают запрос разрешения, если проверка отклонена.
const { session } = require('electron')
session.fromPartition('some-partition').setPermissionRequestHandler((webContents, permission, callback) => {
if (webContents.getURL() === 'some-host' && permission === 'notifications') {
return callback(false) // denied.
}
callback(true)
})
ses.setPermissionCheckHandler(handler)
-
handlerФункция\<логическое значение> | null-
webContents(WebContents | null) - WebContents, проверяющий разрешение. Обратите внимание, что если запрос поступает от подрамки, вы должны использоватьrequestingUrlдля проверки источника запроса. Все подрамки с разными источниками, производящие проверки разрешений, передадут обработчикуnullwebContents, в то время как некоторые другие проверки разрешений, такие как проверкиnotifications, всегда передадутnull. Вы должны использоватьembeddingOriginиrequestingOriginдля определения того, в каком источнике находятся владеющая и запрашивающая рамки соответственно. -
permissionстрока - Тип проверки разрешения. Допустимые значенияmidiSysex,notifications,geolocation,media,mediaKeySystem,midi,pointerLock,fullscreen,openExternal,hid, илиserial. -
requestingOriginстрока - URL источника проверки разрешения -
detailsОбъект - Некоторые свойства доступны только для определенных типов разрешений.-
embeddingOriginстрока (необязательно) - Источник рамки, содержащей рамку, которая сделала проверку разрешения. Устанавливается только для подрамок с разными источниками, производящих проверки разрешений. -
securityOriginстрока (необязательно) - Безопасный источник проверкиmedia. -
mediaTypeстрока (необязательно) - Тип доступа к медиа, который запрашивается, может бытьvideo,audioилиunknown -
requestingUrlстрока (необязательно) - Последний URL, загруженный запрашиваемой рамкой. Не предоставляется для подрамок с разными источниками, производящих проверки разрешений. -
isMainFrameлогическое значение - Является ли рамка, делающая запрос, главной рамой
-
-
Устанавливает обработчик, который может использоваться для ответа на проверки разрешений для session. Возвращение true позволит разрешить разрешение, а false — отклонит его. Обратите внимание, что для получения полного управления разрешениями также необходимо реализовать setPermissionRequestHandler. Большинство веб-API выполняют проверку разрешений, а затем запрашивают разрешение, если проверка отклонена. Для удаления обработчика вызовите setPermissionCheckHandler(null).
const { session } = require('electron')
const url = require('url')
session.fromPartition('some-partition').setPermissionCheckHandler((webContents, permission, requestingOrigin) => {
if (new URL(requestingOrigin).hostname === 'some-host' && permission === 'notifications') {
return true // granted
}
return false // denied
})
ses.setDevicePermissionHandler(handler)
-
handlerFunction<boolean> | null-
detailsObject-
deviceTypestring - Тип устройства, для которого запрашивается разрешение, может бытьhidилиserial. -
originstring - URL источника проверки разрешения на устройство. -
deviceHIDDevice | SerialPort- устройство, для которого запрашивается разрешение.
-
-
Устанавливает обработчик, который может использоваться для ответа на проверки разрешений на устройство для session. Возвращение true позволит разрешить доступ к устройству, а false — отклонит его. Для удаления обработчика вызовите setDevicePermissionHandler(null). Этот обработчик можно использовать для предоставления стандартных разрешений на устройства без предварительного запроса разрешения на устройства (например, с помощью navigator.hid.requestDevice). Если этот обработчик не определен, будут использоваться стандартные разрешения на устройства, предоставленные через выбор устройства (например, с помощью navigator.hid.requestDevice). Кроме того, по умолчанию Electron сохраняет предоставленные разрешения на устройства в памяти. Если требуется хранение на более длительный срок, разработчик может сохранить предоставленные разрешения на устройства (например, при обработке события select-hid-device) и затем считывать их из этого хранилища с помощью setDevicePermissionHandler.
const { app, BrowserWindow } = require('electron')
let win = null
app.whenReady().then(() => {
win = new BrowserWindow()
win.webContents.session.setPermissionCheckHandler((webContents, permission, requestingOrigin, details) => {
if (permission === 'hid') {
// Add logic here to determine if permission should be given to allow HID selection
return true
} else if (permission === 'serial') {
// Add logic here to determine if permission should be given to allow serial port selection
}
return false
})
// Optionally, retrieve previously persisted devices from a persistent store
const grantedDevices = fetchGrantedDevices()
win.webContents.session.setDevicePermissionHandler((details) => {
if (new URL(details.origin).hostname === 'some-host' && details.deviceType === 'hid') {
if (details.device.vendorId === 123 && details.device.productId === 345) {
// Always allow this type of device (this allows skipping the call to `navigator.hid.requestDevice` first)
return true
}
// Search through the list of devices that have previously been granted permission
return grantedDevices.some((grantedDevice) => {
return grantedDevice.vendorId === details.device.vendorId &&
grantedDevice.productId === details.device.productId &&
grantedDevice.serialNumber && grantedDevice.serialNumber === details.device.serialNumber
})
} else if (details.deviceType === 'serial') {
if (details.device.vendorId === 123 && details.device.productId === 345) {
// Always allow this type of device (this allows skipping the call to `navigator.hid.requestDevice` first)
return true
}
}
return false
})
win.webContents.session.on('select-hid-device', (event, details, callback) => {
event.preventDefault()
const selectedDevice = details.deviceList.find((device) => {
return device.vendorId === '9025' && device.productId === '67'
})
callback(selectedPort?.deviceId)
})
})
ses.clearHostResolverCache()
Возвращает Promise<void> — выполняется, когда операция завершена.
Очищает кэш хост-разрешителя.
ses.allowNTLMCredentialsForDomains(domains)
-
domainsstring - Список серверов, для которых включена интегрированная аутентификация, разделённый запятыми.
Динамически устанавливает, следует ли всегда отправлять учетные данные для аутентификации HTTP NTLM или Negotiate.
const { session } = require('electron')
// consider any url ending with `example.com`, `foobar.com`, `baz`
// for integrated authentication.
session.defaultSession.allowNTLMCredentialsForDomains('*example.com, *foobar.com, *baz')
// consider all urls for integrated authentication.
session.defaultSession.allowNTLMCredentialsForDomains('*')
ses.setUserAgent(userAgent[, acceptLanguages])
-
userAgentstring -
acceptLanguagesstring (необязательно)
Переопределяет userAgent и acceptLanguages для этой сессии.
acceptLanguages должен быть упорядоченным списком кодов языков, разделённых запятыми, например, "en-US,fr,de,ko,zh-CN,ja".
Это не влияет на существующие WebContents, и каждый WebContents может использовать webContents.setUserAgent для переопределения пользовательского агента на уровне сессии.
ses.isPersistent()
Возвращает boolean — является ли эта сессия постоянной. По умолчанию webContents сессия BrowserWindow является постоянной. При создании сессии из раздела сессия с префиксом persist: будет постоянной, а другие — временными.
ses.getUserAgent()
Возвращает string — пользовательский агент для этой сессии.
ses.setSSLConfig(config)
-
configObject-
minVersionstring (необязательно) - Может бытьtls1,tls1.1,tls1.2илиtls1.3. Минимальная версия SSL для подключения к удалённым серверам. По умолчаниюtls1. -
maxVersionstring (необязательно) - Может бытьtls1.2илиtls1.3. Максимальная версия SSL для подключения к удалённым серверам. По умолчаниюtls1.3. -
disabledCipherSuitesInteger[] (необязательно) - Список наборов шифров, которые явно запрещены помимо тех, которые отключены встроенной политикой net. Поддерживаются литеральные формы: 0xAABB, где AA —cipher_suite[0], а BB —cipher_suite[1], как определено в RFC 2246, раздел 7.4.1.2. Нераспознанные, но анализируемые наборы шифров в этой форме не вернут ошибку. Пример: для отключения TLS_RSA_WITH_RC4_128_MD5 укажите 0x0004, а для отключения TLS_ECDH_ECDSA_WITH_RC4_128_SHA укажите 0xC002. Обратите внимание, что шифры TLSv1.3 отключить с помощью этого механизма нельзя.
-
Устанавливает конфигурацию SSL для сессии. Все последующие сетевые запросы будут использовать новую конфигурацию. Существующие сетевые подключения (например, подключения WebSocket) не будут прерваны, но старые сокеты в пуле не будут повторно использованы для новых подключений.
ses.getBlobData(identifier)
-
identifierstring - Действительный UUID.
Возвращает Promise<Buffer> — разрешает с данными blob.
ses.downloadURL(url)
-
urlstring
Инициализирует загрузку ресурса по адресу url. API сгенерирует DownloadItem, к которому можно получить доступ с помощью события will-download.
Примечание: Это не выполняет никаких проверок безопасности, связанных с происхождением страницы, в отличие от webContents.downloadURL.
ses.createInterruptedDownload(options)
Позволяет возобновить cancelled или interrupted загрузки из предыдущих Session. API сгенерирует DownloadItem, к которому можно получить доступ с помощью события will-download. В DownloadItem не будет связанных WebContents и начальное состояние будет interrupted. Загрузка начнется только при вызове API resume на DownloadItem.
ses.clearAuthCache()
Возвращает Promise<void> — выполняется, когда кэш HTTP-аутентификации сессии был очищен.
ses.setPreloads(preloads)
-
preloadsstring[] - Массив абсолютных путей к предварительно загружаемым скриптам
Добавляет скрипты, которые будут выполняться НА ВСЕХ содержимых веб-страниц, связанных с этой сессией, сразу перед выполнением обычных скриптов preload.
ses.getPreloads()
Возвращает string[] — массив путей к предварительно загружаемым скриптам, которые были зарегистрированы.
ses.setCodeCachePath(path)
-
pathString - Абсолютный путь для хранения кэша JS-кода, сгенерированного v8, из рендерера.
Устанавливает каталог для хранения кэша сгенерированного JS-кода code cache для этой сессии. Каталог не обязательно должен быть создан пользователем перед этим вызовом, среда выполнения создаст его, если он не существует, иначе будет использоваться существующий каталог. Если каталог не может быть создан, тогда кэш кода не будет использоваться, и все операции, связанные с кэшем кода, будут выполняться без ошибок в среде выполнения. По умолчанию каталог будет Code Cache в соответствующей папке данных пользователя.
ses.clearCodeCaches(options)
Возвращает Promise<void> — разрешается, когда завершена операция очистки кэша кода.
ses.setSpellCheckerEnabled(enable)
-
enableboolean
Устанавливает, следует ли включить встроенную проверку орфографии.
ses.isSpellCheckerEnabled()
Возвращает boolean — включена ли встроенная проверка орфографии.
ses.setSpellCheckerLanguages(languages)
-
languagesstring[] — массив кодов языков для включения проверки орфографии.
Встроенная проверка орфографии не определяет автоматически язык, на котором пользователь печатает. Для корректной проверки слов необходимо вызвать этот API с массивом кодов языка. Список поддерживаемых кодов языка можно получить с помощью свойства ses.availableSpellCheckerLanguages.
Примечание: В macOS используется проверка орфографии ОС и автоматически определяет ваш язык. Этот API является бесполезным в macOS.
ses.getSpellCheckerLanguages()
Возвращает string[] — массив кодов языков, для которых включена проверка орфографии. Если этот список пустой, проверка орфографии будет использовать en-US. По умолчанию при запуске, если этот параметр пустой, Electron попытается заполнить его текущим локалем ОС. Этот параметр сохраняется при перезапуске.
Примечание: В macOS используется проверка орфографии ОС и имеет свой собственный список языков. Этот API бесполезен в macOS.
ses.setSpellCheckerDictionaryDownloadURL(url)
-
urlstring — базовый URL для скачивания словарей hunspell Electron.
По умолчанию Electron скачивает словари hunspell с CDN Chromium. Если вы хотите изменить это поведение, вы можете использовать этот API, чтобы указать загрузчику словарей свой собственный хостинг словарей hunspell. В каждом релизе мы публикуем файл hunspell_dictionaries.zip, содержащий необходимые файлы для размещения.
Сервер файлов должен быть регистронезависимым. Если вы не можете этого сделать, вы должны загрузить каждый файл дважды: один раз с регистром, который у него есть в ZIP-архиве, и один раз со строчными буквами.
Если файлы, представленные в hunspell_dictionaries.zip, доступны по адресу https://example.com/dictionaries/language-code.bdic, то вы должны вызвать этот API с ses.setSpellCheckerDictionaryDownloadURL('https://example.com/dictionaries/'). Обратите внимание на заключительную косую черту. URL словарей формируется как ${url}${filename}.
Примечание: В macOS используется проверка орфографии ОС, поэтому мы не загружаем никакие файлы словарей. Этот API является бесполезным в macOS.
ses.listWordsInSpellCheckerDictionary()
Возвращает Promise<string[]> — массив всех слов в пользовательском словаре приложения. Разрешается после загрузки всего словаря с диска.
ses.addWordToSpellCheckerDictionary(word)
-
wordstring — слово, которое вы хотите добавить в словарь
Возвращает boolean — успешно ли слово было записано в пользовательский словарь. Этот API не будет работать в неперсистентных (в оперативной памяти) сессиях.
Примечание: В macOS и Windows 10 это слово также будет записано в пользовательский словарь ОС.
ses.removeWordFromSpellCheckerDictionary(word)
-
wordstring — слово, которое вы хотите удалить из словаря
Возвращает boolean — успешно ли слово было удалено из пользовательского словаря. Этот API не будет работать в неперсистентных (в оперативной памяти) сессиях.
Примечание: В macOS и Windows 10 это слово также будет удалено из пользовательского словаря ОС.
ses.loadExtension(path[, options])
-
pathstring — Путь к каталогу с распакованным расширением Chrome
Возвращает Promise<Extension> — разрешается после загрузки расширения.
Этот метод выбросит исключение, если расширение не удалось загрузить. Если при установке расширения возникают предупреждения (например, если расширение запрашивает API, которого Electron не поддерживает), они будут записаны в консоль.
Обратите внимание, что Electron не поддерживает весь набор API расширений Chrome. Подробнее о поддерживаемых API расширений см. в разделе Поддерживаемые API расширений.
Обратите внимание, что в предыдущих версиях Electron расширения, которые загружались, запоминались для будущих запусков приложения. Сейчас это не так: loadExtension необходимо вызывать при каждом запуске приложения, если вы хотите загрузить расширение.
const { app, session } = require('electron')
const path = require('path')
app.on('ready', async () => {
await session.defaultSession.loadExtension(
path.join(__dirname, 'react-devtools'),
// allowFileAccess is required to load the devtools extension on file:// URLs.
{ allowFileAccess: true }
)
// Note that in order to use the React DevTools extension, you'll need to
// download and unzip a copy of the extension.
})
Этот API не поддерживает загрузку упакованных (.crx) расширений.
Примечание: Этот API нельзя вызывать до того, как будет испущен событие ready модуля app.
Примечание: Загрузка расширений в сессии оперативной памяти (неперсистентной) не поддерживается и вызовет ошибку.
ses.removeExtension(extensionId)
-
extensionIdstring — ID расширения для удаления
Выгружает расширение.
Примечание: Этот API нельзя вызывать до того, как будет испущен событие ready модуля app.
ses.getExtension(extensionId)
-
extensionIdstring — ID расширения для запроса
Возвращает Extension | null — загруженное расширение с заданным ID.
Примечание: Этот API нельзя вызывать до того, как будет испущен событие ready модуля app.
ses.getAllExtensions()
Возвращает Extension[] — список всех загруженных расширений.
Примечание: Этот API нельзя вызывать до того, как будет испущен событие ready модуля app.
ses.getStoragePath()
Возвращает string | null — абсолютный путь к файловой системе, где данные для этой сессии сохраняются на диске. Для сессий в оперативной памяти возвращает null.
Instance Properties
Следующие свойства доступны для экземпляров Session:
ses.availableSpellCheckerLanguages Только для чтения
Массив string[] с содержанием всех известных поддерживаемых языков проверки орфографии. Передача кода языка в API setSpellCheckerLanguages, которого нет в этом массиве, приведет к ошибке.
ses.spellCheckerEnabled
Значение boolean обозначающее, включена ли встроенная проверка орфографии.
ses.storagePath Только для чтения
Значение string | null обозначающее абсолютный путь в файловой системе, где данные этой сессии сохраняются на диске. Для сессий в оперативной памяти возвращает null.
ses.cookies Только для чтения
Объект Cookies для этой сессии.
ses.serviceWorkers Только для чтения
Объект ServiceWorkers для этой сессии.
ses.webRequest Только для чтения
Объект WebRequest для этой сессии.
ses.protocol Только для чтения
Объект Protocol для этой сессии.
const { app, session } = require('electron')
const path = require('path')
app.whenReady().then(() => {
const protocol = session.fromPartition('some-partition').protocol
if (!protocol.registerFileProtocol('atom', (request, callback) => {
const url = request.url.substr(7)
callback({ path: path.normalize(`${__dirname}/${url}`) })
})) {
console.error('Failed to register protocol')
}
})
ses.netLog Только для чтения
Объект NetLog для этой сессии.
const { app, session } = require('electron')
app.whenReady().then(async () => {
const netLog = session.fromPartition('some-partition').netLog
netLog.startLogging('/path/to/net-log')
// After some network events
const path = await netLog.stopLogging()
console.log('Net-logs written to', path)
})
© GitHub Inc.
Licensed under the MIT license.
https://www.electronjs.org/docs/latest/api/session