session
模块可用于创建新的 session
对象。
你还可以使用WebContents
的session
属性或session
模块访问现有页的session
session
模块具有以下方法:
partition
String选项
Object (可选)cache
Boolean - 是否可以使用缓存.
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
对象,该应用程序的默认session对象。
获取和设置Session的属性。
进程:
你可以创建一个 Session
对象在session
模块中。
const { session } = require('electron')
const ses = session.fromPartition('persist:name')
console.log(ses.getUserAgent())
以下事件会在Session
实例触发。
Instance Events
event
Eventitem
webContents
WebContents
当 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)
callback
Function - 回调函数size
Integer 缓存大小(单位:bytes)
Callback会被调用,参数是session的当前缓存大小。
ses.clearCache(callback)
callback
Function - 会在操作完成之后被调用。
清除session的HTTP缓存。
ses.clearStorageData([options, callback])
选项
Object (可选)origin
String - (可选项) 这个值应该按照window.location.origin
的形式:协议://主机名:端口
方式设置。storages
String - The types of storages to clear, can contain:appcache
,cookies
,filesystem
,indexdb
,localstorage
,shadercache
,websql
,serviceworkers
,cachestorage
.quotas
String[] - (可选项) 要清除的配额类型, 包含:temporary
,persistent
,syncable
。
ses.flushStorageData()
写入任何未写入DOMStorage数据到磁盘.
ses.setProxy(config, callback)
config
ObjectpacScript
String - 与 PAC 文件关联的 URL。proxyRules
String - 表明要使用的代理规则。proxyBypassRules
String - 表明哪些 url 应绕过代理设置的规则。
callback
Function - 会在操作完成之后被调用。
代理设置
当pacScript
和proxyRules
一起提供时, proxyRules
选项会被忽略, 会使用配置。
例如:
http=foopy:80;ftp=foopy2
- Use HTTP proxyfoopy:80
forhttp://
URLs, and HTTP proxyfoopy2:80
forftp://
URLs.foopy:80
- Use HTTP proxyfoopy:80
for all URLs.foopy:80,bar,direct://
- Use HTTP proxyfoopy:80
for all URLs, failing over tobar
iffoopy:80
is unavailable, and after that using no proxy.socks4://foopy
- Use SOCKS v4 proxyfoopy:1080
for all URLs.http=foopy,socks5://bar.com
- Use HTTP proxyfoopy
for http URLs, and fail over to the SOCKS5 proxybar.com
iffoopy
is unavailable.http=foopy,direct://
- Use HTTP proxyfoopy
for http URLs, and use no proxy iffoopy
is 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", "..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]", ""
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)
url
URLcallback
Function - 回调函数proxy
String
解析url
的代理信息。执行被请求时, 将使用callback(proxy)
来调用callback
。
ses.setDownloadPath(path)
path
String - 下载地址.
设置下载保存目录。默认情况下, 下载目录将是相应应用程序文件夹下的Downloads
。
ses.enableNetworkEmulation(options)
选项
Objectoffline
Boolean (可选) - 是否模拟网络中断、离线。默认 否。latency
Double (可选) - RTT时延毫秒值. 默认为0将禁用时延调节。downloadThroughput
Double (可选) - 指定下载Bps速率。默认为0将禁用下载限速。uploadThroughput
Double (可选) - 指定上传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)
proc
Function - 回调函数request
Objecthostname
Stringcertificate
verificationResult
String - chromium证书验证结果errorCode
Integer - 错误代码
callback
Function - 回调函数verificationResult
Integer - 证书错误代码之一,来自 这里。 除了证书错误代码外,还可以使用以下特殊代码。-0
- 表示成功并禁用证书透明度验证-2
- 表示失败-3
- 使用chromium的验证结果
每当一个服务器证书请求验证,proc
将被这样proc(request, callback)
调用,为session
设置证书验证过程。 回调函数callback(0)
接受证书,callback(-2)
驳回证书。
const { BrowserWindow } = require('electron')
let win = new BrowserWindow()
win.webContents.session.setCertificateVerifyProc((request, callback) => {
const { hostname } = request
if (hostname === 'github.com') {
callback(0)
} else {
callback(-2)
}
})
ses.setPermissionRequestHandler(handler)
ses.setPermissionCheckHandler(handler)
handler
Function | nullwebContents
- WebContents checking the permission.permission
String - Enum of 'media'.requestingOrigin
String - The origin URL of the permission checkdetails
Object - 一些属性只有在某些授权状态下可用。securityOrigin
String - The security orign of themedia
check.mediaType
String - The type of media access being requested, can bevideo
,audio
orunknown
Sets the handler which can be used to respond to permission checks for thesession
. Returningtrue
will allow the permission andfalse
will 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])
callback
Function (optional) - 会在操作完成后被调用.
清除主机解析程序的缓存。
ses.allowNTLMCredentialsForDomains(domains)
domains
String - 一个逗号分隔的服务器列表, 用于收集已经启用身份验证的服务器。
动态设置是否始终为 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])
userAgent
StringacceptLanguages
String (可选)
覆盖当前会话的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)
identifier
String - 有效的 UUID.callback
Function - 回调函数result
Buffer - Blob 数据.
ses.createInterruptedDownload(options)
options
Objectpath
String - 下载的绝对路径.urlChain
String[] - 完整的 url 下载地址.mimeType
String (可选)offset
Integer - 下载的开始范围.length
Integer - 下载的总长度。lastModified
String - 上次修改的标头值。eTag
String - ETag 标头值。startTime
Double (optional) - 下载的时间是从 UNIX 时代以来的秒数开始的。
允许从上一个Session
恢复cancelled
或interrupted
下载。 该 API 将生成一个 DownloadItem , 可使用 事件进行访问。 DownloadItem 将不具有与之关联的任何WebContents
, 并且初始状态将为interrupted
。 只有在 上调用resume
API 时, 才会启动下载。
ses.clearAuthCache(options[, callback])
options
( | RemoveClientCertificate)callback
Function (optional) - 会在操作完成后被调用.
清除会话的 HTTP 身份验证缓存。
ses.setPreloads(preloads)
preloads
String[] - 数组,该数组由所有需要进行预加载的脚本的绝对路径组成。
Adds scripts that will be executed on ALL web contents that are associated with this session just before normalpreload
scripts run.
ses.getPreloads()
返回 String[]
返回一个数组,这个数组由已经注册过的预加载脚本的路径组成。
以下属性在` Session </ 0>实例上可用:
ses.cookies`
此会话的 cookie 对象。
ses.webRequest
此会话的 WebRequest 对象。
ses.protocol
此会话的 协议 对象。
ses.netLog
A NetLog object for this session.
const { app, session } = require('electron')
app.on('ready', function () {
const netLog = session.fromPartition('some-partition').netLog
netLog.startLogging('/path/to/net-log')
// After some network events
netLog.stopLogging(path => {
console.log('Net-logs written to', path)
})
})