- session
- 方法
- session.fromPartition(partition[, options])
- 属性
- session.defaultSession
- 类: Session
- 实例事件
- Instance Events
- 实例方法
- ses.getCacheSize(callback)
- ses.getCacheSize()
- ses.clearCache(callback)
- ses.clearCache()
- ses.clearStorageData([options,] callback)
- ses.clearStorageData([options])
- ses.flushStorageData()
- ses.setProxy(config, callback)
- ses.setProxy(config)
- ses.resolveProxy(url, callback)
- ses.resolveProxy(url)
- ses.setDownloadPath(path)
- ses.enableNetworkEmulation(options)
- ses.disableNetworkEmulation()
- ses.setCertificateVerifyProc(proc)
- ses.setPermissionRequestHandler(handler)
- ses.setPermissionCheckHandler(handler)
- ses.clearHostResolverCache(callback)
- ses.clearHostResolverCache()
- ses.allowNTLMCredentialsForDomains(domains)
- ses.setUserAgent(userAgent[, acceptLanguages])
- ses.getUserAgent()
- ses.getBlobData(identifier, callback)
- ses.getBlobData(identifier)
- ses.createInterruptedDownload(options)
- ses.clearAuthCache(options, callback)
- ses.clearAuthCache(options) (deprecated)
- ses.clearAuthCache()
- ses.setPreloads(preloads)
- ses.getPreloads()
- 实例属性
- ses.cookies`
- ses.webRequest
- ses.protocol
- ses.netLog
- 实例事件
- 方法
session
管理浏览器会话、cookie、缓存、代理设置等。
进程:主进程
session 模块可用于创建新的 session 对象。
你还可以使用WebContents的session属性或session模块访问现有页的session
const { BrowserWindow } = require('electron')let win = new BrowserWindow({ width: 800, height: 600 })win.loadURL('http://github.com')const ses = win.webContents.sessionconsole.log(ses.getUserAgent())
方法
session 模块具有以下方法:
session.fromPartition(partition[, options])
partitionString选项Object (可选)cacheBoolean - 是否可以使用缓存.ReturnsSession- 根据partition字符串产生的session实例。 当这里已存在一个Session具有相同的partition, 它将被返回; 否则一个新的Session实例将根据options被创建。
如果 partition 以 persist:开头, 该页面将使用持续的 session,并在所有页面生效,且使用同一个partition. 如果没有 persist: 前缀, 页面将使用 in-memory session. 如果没有设置partition,app 将返回默认的session。
要根据options创建Session,你需要确保Session的partition在之前从未被使用。 没有办法修改一个已存在的Session对象的options。
属性
session 模块具有以下方法:
session.defaultSession
一个Session对象,该应用程序的默认session对象。
类: Session
获取和设置Session的属性。
进程:主进程
你可以创建一个 Session对象在session模块中。
const { session } = require('electron')const ses = session.fromPartition('persist:name')console.log(ses.getUserAgent())
实例事件
以下事件会在Session实例触发。
Instance Events
eventEventitemDownloadItemwebContentsWebContents当 Electron 刚要在webContents中下载`item<0>的时候触发。
调用event.preventDefault()方法,将会停止下载,并且在进程的next tick中,item`将不再可用。
const { session } = require('electron')session.defaultSession.on('will-download', (event, item, webContents) => {event.preventDefault()require('request')(item.getURL(), (data) => {require('fs').writeFileSync('/somewhere', data)})})
实例方法
在Session实例对象中,有以下方法:
ses.getCacheSize(callback)
callbackFunction - 回调函数sizeInteger 缓存大小(单位:bytes)errorInteger - The error code corresponding to the failure.Callback会被调用,参数是session的当前缓存大小。
即将弃用
ses.getCacheSize()
Returns Promise<Integer> - the session's current cache size, in bytes.
ses.clearCache(callback)
callbackFunction - Called when operation is done.errorInteger - The error code corresponding to the failure.清除session的HTTP缓存。
即将弃用
ses.clearCache()
Returns Promise<void> - resolves when the cache clear operation is complete.
清除session的HTTP缓存。
ses.clearStorageData([options,] callback)
选项Object (可选)originString - (可选项) 这个值应该按照window.location.origin的形式:协议://主机名:端口方式设置。storagesString - The types of storages to clear, can contain:appcache,cookies,filesystem,indexdb,localstorage,shadercache,websql,serviceworkers,cachestorage.quotasString[] - (可选项) 要清除的配额类型, 包含:temporary,persistent,syncable。
callbackFunction (可选) - 会在操作完成后被调用.Clears the storage data for the current session.
即将弃用
ses.clearStorageData([options])
optionsObject (可选)originString - (可选项) 这个值应该按照window.location.origin的形式:协议://主机名:端口方式设置。storagesString - The types of storages to clear, can contain:appcache,cookies,filesystem,indexdb,localstorage,shadercache,websql,serviceworkers,cachestorage.quotasString[] - (可选项) 要清除的配额类型, 包含:temporary,persistent,syncable。ReturnsPromise<void>- resolves when the storage data has been cleared.
ses.flushStorageData()
写入任何未写入DOMStorage数据到磁盘.
ses.setProxy(config, callback)
configObjectpacScriptString - 与 PAC 文件关联的 URL。proxyRulesString - 表明要使用的代理规则。proxyBypassRulesString - 表明哪些 url 应绕过代理设置的规则。
callbackFunction - 会在操作完成之后被调用。代理设置
当pacScript和proxyRules一起提供时, proxyRules 选项会被忽略, 会使用pacScript配置。
proxyRules 要遵循以下规则:
proxyRules = schemeProxies[";"<schemeProxies>]schemeProxies = [<urlScheme>"="]<proxyURIList>urlScheme = "http" | "https" | "ftp" | "socks"proxyURIList = <proxyURL>[","<proxyURIList>]proxyURL = [<proxyScheme>"://"]<proxyHost>[":"<proxyPort>]
例如:
http=foopy:80;ftp=foopy2- Use HTTP proxyfoopy:80forhttp://URLs, and HTTP proxyfoopy2:80forftp://URLs.foopy:80- Use HTTP proxyfoopy:80for all URLs.foopy:80,bar,direct://- Use HTTP proxyfoopy:80for all URLs, failing over tobariffoopy:80is unavailable, and after that using no proxy.socks4://foopy- Use SOCKS v4 proxyfoopy:1080for all URLs.http=foopy,socks5://bar.com- Use HTTP proxyfoopyfor http URLs, and fail over to the SOCKS5 proxybar.comiffoopyis unavailable.http=foopy,direct://- Use HTTP proxyfoopyfor http URLs, and use no proxy iffoopyis unavailable.http=foopy;socks=foopy2- 对于http URL,用foopy作为HTTP协议代理,而其它所有URL则用socks4://foopy2协议。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 ]
匹配 IP 地址文本的 url。
例如: "127.0.1", "[0:0::1]", "[::1]", "http://[::1]:99"
IP_LITERAL "/" PREFIX_LENGTH_IN_BITS
匹配位于给定范围之间的 IP 文本的任何 URL。IP 范围是使用 CIDR 表示法指定的。
例如: "192.168.1.1/16", "fefe:13::abc/33".
<local>
匹配本地地址。local 的含义是,是否匹配其中一个: "127.0.0.1", "::1", "localhost".
即将弃用
ses.setProxy(config)
configObjectpacScriptString - 与 PAC 文件关联的 URL。proxyRulesString - 表明要使用的代理规则。proxyBypassRulesString - 表明哪些 url 应绕过代理设置的规则。ReturnsPromise<void>- Resolves when the proxy setting process is complete.
代理设置
当pacScript和proxyRules一起提供时, proxyRules 选项会被忽略, 会使用pacScript配置。
proxyRules 要遵循以下规则:
proxyRules = schemeProxies[";"<schemeProxies>]schemeProxies = [<urlScheme>"="]<proxyURIList>urlScheme = "http" | "https" | "ftp" | "socks"proxyURIList = <proxyURL>[","<proxyURIList>]proxyURL = [<proxyScheme>"://"]<proxyHost>[":"<proxyPort>]
例如:
http=foopy:80;ftp=foopy2- Use HTTP proxyfoopy:80forhttp://URLs, and HTTP proxyfoopy2:80forftp://URLs.foopy:80- Use HTTP proxyfoopy:80for all URLs.foopy:80,bar,direct://- Use HTTP proxyfoopy:80for all URLs, failing over tobariffoopy:80is unavailable, and after that using no proxy.socks4://foopy- Use SOCKS v4 proxyfoopy:1080for all URLs.http=foopy,socks5://bar.com- Use HTTP proxyfoopyfor http URLs, and fail over to the SOCKS5 proxybar.comiffoopyis unavailable.http=foopy,direct://- Use HTTP proxyfoopyfor http URLs, and use no proxy iffoopyis unavailable.http=foopy;socks=foopy2- 对于http URL,用foopy作为HTTP协议代理,而其它所有URL则用socks4://foopy2协议。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 ]
匹配 IP 地址文本的 url。
例如: "127.0.1", "[0:0::1]", "[::1]", "http://[::1]:99"
IP_LITERAL "/" PREFIX_LENGTH_IN_BITS
匹配位于给定范围之间的 IP 文本的任何 URL。IP 范围是使用 CIDR 表示法指定的。
例如: "192.168.1.1/16", "fefe:13::abc/33".
<local>
匹配本地地址。local 的含义是,是否匹配其中一个: "127.0.0.1", "::1", "localhost".
ses.resolveProxy(url, callback)
urlURLcallbackFunctionproxyString解析url的代理信息。执行被请求时, 将使用callback(proxy)来调用callback。
即将弃用
ses.resolveProxy(url)
urlURLReturnsPromise<string>- Resolves with the proxy information forurl.
ses.setDownloadPath(path)
pathString - 下载地址.设置下载保存目录。默认情况下, 下载目录将是相应应用程序文件夹下的Downloads。
ses.enableNetworkEmulation(options)
optionsObjectofflineBoolean (可选) - 是否模拟网络中断、离线。默认 否。latencyDouble (可选) - RTT时延毫秒值. 默认为0将禁用时延调节。downloadThroughputDouble (可选) - 指定下载Bps速率。默认为0将禁用下载限速。uploadThroughputDouble (可选) - 指定上传Bps速率. 默认0将禁用上传速率限制。通过指定的配置为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.disableNetworkEmulation()
禁用所有为 session 模拟的已激活网络。重置为原始网络配置。
ses.setCertificateVerifyProc(proc)
procFunctionrequestObjecthostnameStringcertificate证书verificationResultString - chromium证书验证结果errorCodeInteger - 错误代码
callbackFunctionverificationResultInteger - 证书错误代码之一,来自 这里。 除了证书错误代码外,还可以使用以下特殊代码。-0- 表示成功并禁用证书透明度验证-2- 表示失败-3- 使用chromium的验证结果每当一个服务器证书请求验证,proc将被这样proc(request, callback)调用,为session设置证书验证过程。 回调函数callback(0)接受证书,callback(-2)驳回证书。
调用 setCertificateVerifyProc(null)将恢复为默认证书验证过程。
const { BrowserWindow } = require('electron')let win = new BrowserWindow()win.webContents.session.setCertificateVerifyProc((request, callback) => {const { hostname } = requestif (hostname === 'github.com') {callback(0)} else {callback(-2)}})
ses.setPermissionRequestHandler(handler)
handlerFunction | nullwebContentsWebContents - 请求权限的WebContents。 Please note that if the request comes from a subframe you should userequestingUrlto check the request origin.permissionString - 枚举 'media', 'geolocation', 'notifications', 'midiSysex', 'pointerLock', 'fullscreen', 'openExternal'.callbackFunctionpermissionGrantedBoolean - 允许或拒绝该权限.
detailsObject - 一些属性只有在某些授权状态下可用。externalURLString (Optional) - The url of theopenExternalrequest.mediaTypesString - The types of media access being requested, elements can bevideooraudiorequestingUrlString - The last URL the requesting frame loadedisMainFrameBoolean - Whether the frame making the request is the main frame设置可用于响应session的权限请求的处理程序。 调用callback(true)将允许该权限, 调用callback(false)将拒绝它。 若要清除处理程序, 请调用setPermissionRequestHandler (null)。
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)
handlerFunction | nullwebContentsWebContents - WebContents checking the permission. Please note that if the request comes from a subframe you should userequestingUrlto check the request origin.permissionString - Enum of 'media'.requestingOriginString - The origin URL of the permission checkdetailsObject - 一些属性只有在某些授权状态下可用。securityOriginString - The security orign of themediacheck.mediaTypeString - The type of media access being requested, can bevideo,audioorunknownrequestingUrlString - The last URL the requesting frame loadedisMainFrameBoolean - Whether the frame making the request is the main frameSets the handler which can be used to respond to permission checks for thesession. Returningtruewill allow the permission andfalsewill reject it. To clear the handler, callsetPermissionCheckHandler(null).
const { session } = require('electron')session.fromPartition('some-partition').setPermissionCheckHandler((webContents, permission) => {if (webContents.getURL() === 'some-host' && permission === 'notifications') {return false // denied}return true})
ses.clearHostResolverCache(callback)
callbackFunction (optional) - 会在操作完成后被调用.清除主机解析程序的缓存。
即将弃用
ses.clearHostResolverCache()
Returns Promise<void> - Resolves when the operation is complete.
清除主机解析程序的缓存。
ses.allowNTLMCredentialsForDomains(domains)
domainsString - 一个逗号分隔的服务器列表, 用于收集已经启用身份验证的服务器。动态设置是否始终为 HTTP NTLM 发送凭据或协商身份验证。
const { session } = require('electron')// 以 "example.com"、"foobar.com"、"baz" 结尾的 url 用于身份验证。session.defaultSession.allowNTLMCredentialsForDomains('*example.com, *foobar.com, *baz')// 所有的 url 都可以用作身份验证session.defaultSession.allowNTLMCredentialsForDomains('*')
ses.setUserAgent(userAgent[, acceptLanguages])
userAgentStringacceptLanguagesString (可选)覆盖当前会话的userAgent和acceptLanguages.
acceptLanguages 必须是用逗号分隔的语言代码列表,例如 "en-US,fr,de,ko,zh-CN,ja".
这不会影响现有的WebContents, 并且每个WebContents都可以使用 webContents.setUserAgent重写会话范围的user agent。
ses.getUserAgent()
返回 String - 当前会话的 user agent.
ses.getBlobData(identifier, callback)
identifierString - 有效的 UUID.callbackFunctionresultBuffer - Blob 数据.即将弃用
ses.getBlobData(identifier)
identifierString - 有效的 UUID.ReturnsPromise<Buffer>- resolves with blob data.
ses.createInterruptedDownload(options)
optionsObjectpathString - 下载的绝对路径.urlChainString[] - 完整的 url 下载地址.mimeTypeString (可选)offsetInteger - 下载的开始范围.lengthInteger - 下载的总长度。lastModifiedString - 上次修改的标头值。eTagString - ETag 标头值。startTimeDouble (optional) - 下载的时间是从 UNIX 时代以来的秒数开始的。允许从上一个Session恢复cancelled或interrupted下载。 该 API 将生成一个 DownloadItem , 可使用 will-download 事件进行访问。 DownloadItem 将不具有与之关联的任何WebContents, 并且初始状态将为interrupted。 只有在 DownloadItem 上调用resumeAPI 时, 才会启动下载。
ses.clearAuthCache(options, callback)
options(RemovePassword | RemoveClientCertificate)callbackFunction - 会在操作完成之后被调用。清除会话的 HTTP 身份验证缓存。
即将弃用
ses.clearAuthCache(options) (deprecated)
options(RemovePassword | RemoveClientCertificate)ReturnsPromise<void>- resolves when the session’s HTTP authentication cache has been cleared.
ses.clearAuthCache()
Returns Promise<void> - resolves when the session’s HTTP authentication cache has been cleared.
ses.setPreloads(preloads)
preloadsString[] - 数组,该数组由所有需要进行预加载的脚本的绝对路径组成。Adds scripts that will be executed on ALL web contents that are associated with this session just before normalpreloadscripts run.
ses.getPreloads()
返回 String[] 返回一个数组,这个数组由已经注册过的预加载脚本的路径组成。
实例属性
以下属性在` Session </ 0>实例上可用:
ses.cookies`
此会话的 cookie 对象。
ses.webRequest
此会话的 WebRequest 对象。
ses.protocol
此会话的 协议 对象。
const { app, session } = require('electron')const path = require('path')app.on('ready', function () {const protocol = session.fromPartition('some-partition').protocolprotocol.registerFileProtocol('atom', function (request, callback) {var url = request.url.substr(7)callback({ path: path.normalize(`${__dirname}/${url}`) })}, function (error) {if (error) console.error('Failed to register protocol')})})
ses.netLog
A NetLog object for this session.
const { app, session } = require('electron')app.on('ready', async function () {const netLog = session.fromPartition('some-partition').netLognetLog.startLogging('/path/to/net-log')// After some network eventsconst path = await netLog.stopLogging()console.log('Net-logs written to', path)})
