- session
- 方法
- 属性
- 类: Session
- 实例事件
- 实例方法
- ses.getCacheSize(callback)
- ses.clearCache(callback)
- ses.clearStorageData([options, callback])
- ses.flushStorageData()
- ses.setProxy(config, callback)
- ses.resolveProxy(url, callback)
- ses.setDownloadPath(path)
- ses.enableNetworkEmulation(options)
- ses.disableNetworkEmulation()
- ses.setCertificateVerifyProc(proc)
- ses.setPermissionRequestHandler(handler)
- ses.setPermissionCheckHandler(handler)
- ses.clearHostResolverCache([callback])
- ses.allowNTLMCredentialsForDomains(domains)
- ses.setUserAgent(userAgent[, acceptLanguages])
- ses.getUserAgent()
- ses.getBlobData(identifier, callback)
- ses.createInterruptedDownload(options)
- ses.clearAuthCache(options[, callback])
- ses.setPreloads(preloads)
- ses.getPreloads()
- 实例属性
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.session
console.log(ses.getUserAgent())
方法
session
模块具有以下方法:
session.fromPartition(partition[, options])
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.defaultSession
一个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
DownloadItemwebContents
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
。
callback
Function (可选) - 会在操作完成后被调用.
清除Web storage的数据。
ses.flushStorageData()
写入任何未写入DOMStorage数据到磁盘.
ses.setProxy(config, callback)
config
ObjectpacScript
String - 与 PAC 文件关联的 URL。proxyRules
String - 表明要使用的代理规则。proxyBypassRules
String - 表明哪些 url 应绕过代理设置的规则。
callback
Function - 会在操作完成之后被调用。
代理设置
当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: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", "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)
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
CertificateverificationResult
String - chromium证书验证结果errorCode
Integer - 错误代码
callback
Function - 回调函数verificationResult
Integer - 证书错误代码之一,来自 这里。 除了证书错误代码外,还可以使用以下特殊代码。-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 } = request
if (hostname === 'github.com') {
callback(0)
} else {
callback(-2)
}
})
ses.setPermissionRequestHandler(handler)
handler
Function | nullwebContents
WebContents - 请求权限的WebContents。permission
String - 枚举 'media', 'geolocation', 'notifications', 'midiSysex', 'pointerLock', 'fullscreen', 'openExternal'.callback
Function - 回调函数permissionGranted
Boolean - 允许或拒绝该权限.
details
Object - 一些属性只有在某些授权状态下可用。externalURL
String -openExternal
请求的地址。mediaTypes
String[] - The types of media access being requested, elements can bevideo
oraudio
设置可用于响应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)
handler
Function | nullwebContents
WebContents - 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 , 可使用 will-download 事件进行访问。 DownloadItem 将不具有与之关联的任何WebContents
, 并且初始状态将为interrupted
。 只有在 DownloadItem 上调用resume
API 时, 才会启动下载。
ses.clearAuthCache(options[, callback])
options
(RemovePassword | 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
此会话的 协议 对象。
const { app, session } = require('electron')
const path = require('path')
app.on('ready', function () {
const protocol = session.fromPartition('some-partition').protocol
protocol.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', 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)
})
})