协议 | protocol
协议
注册一个自定义协议并拦截现有的协议请求。
Process: Main
实现与协议具有相同效果的file://
协议的示例:
const {app, protocol} = require('electron')
const path = require('path')
app.on('ready', () => {
protocol.registerFileProtocol('atom', (request, callback) => {
const url = request.url.substr(7)
callback{path: path.normalize(`${__dirname}/${url}`)})
}, (error) => {
if (error) console.error('Failed to register protocol')
})
})
注意:
除非指定,否则所有方法只能ready
在app
模块事件发出后使用。
方法
protocol
模块具有以下方法:
protocol.registerStandardSchemes(schemes[, options])
schemes
字符串[] - 自定义方案被注册为标准方案。
标准方案遵循 RFC 3986调用通用 URI 语法的内容。例如,http
并且https
是标准方案,而file
不是。
按照标准注册方案,将允许相对和绝对资源在服务时正确解决。否则,该方案的行为将与file
协议类似,但无法解析相对 URL。
例如,当您使用自定义协议加载后续页面而未将其注册为标准方案时,图像将不会被加载,因为非标准方案无法识别相对 URL:
<body>
<img src='test.png'>
</body>
通过标准注册方案将允许通过 FileSystem API 访问文件。否则,渲染器将为该方案引发安全错误。
默认情况下,对于非标准方案,Web 存储 API(localStorage,sessionStorage,webSQL,indexedDB,cookies)被禁用。所以一般来说,如果你想注册一个自定义协议来替换http
协议,你必须将它注册为一个标准的方案:
const {app, protocol} = require('electron')
protocol.registerStandardSchemes(['atom'])
app.on('ready', () => {
protocol.registerHttpProtocol('atom', '...')
})
注意:
此方法只能ready
在app
模块事件发出之前使用。
protocol.registerServiceWorkerSchemes(schemes)
schemes
字符串[] - 要注册以处理服务人员的自定义方案。
protocol.registerFileProtocol(scheme, handler[, completion])
scheme
串
- `callback` Function
- `filePath` String (optional)
completion
功能(可选)
注册该协议scheme
将发送该文件作为响应。当将要创建a时,handler
将会调用它。将在成功注册或失败时调用。handler(request, callback)requestschemecompletioncompletion(null)schemecompletion(error)
为了处理request
,callback
应该用文件的路径或者具有path
属性的对象调用,例如callback(filePath)
或callback{path: filePath})。
当callback
用无,数字或具有error
属性的对象调用时,request
将会失败并显示error
指定的数字。有关可用的可用错误号,请参阅错误列表。
默认情况下,scheme
对象的处理方式与http:
解析不同于遵循“通用URI语法”的协议的解析方式file:
,因此您可能需要调用protocol.registerStandardSchemes
以将您的方案视为标准方案。
protocol.registerBufferProtocol(scheme, handler[, completion])
scheme
串
- `callback` Function
- `buffer` (Buffer | [MimeTypedBuffer](../structures/mime-typed-buffer/index)) (optional)
completion
功能(可选)
注册该协议scheme
将发送Buffer
回应。
registerFileProtocol
除了callback
应该使用Buffer
具有“ data
,mimeType
”和“ charset
属性” 的对象或对象调用应用程序之外,其用法与此相同。
例:
const {protocol} = require('electron')
protocol.registerBufferProtocol('atom', (request, callback) => {
callback{mimeType: 'text/html', data: Buffer.from('<h5>Response</h5>')})
}, (error) => {
if (error) console.error('Failed to register protocol')
})
protocol.registerStringProtocol(scheme, handler[, completion])
scheme
串
- `callback` Function
- `data` String (optional)
completion
功能(可选)
注册该协议scheme
将发送String
回应。
registerFileProtocol
除了callback
应该使用String
具有“ data
,mimeType
”和“ charset
属性” 的对象或对象来调用之外,其用法与此相同。
protocol.registerHttpProtocol(scheme, handler[, completion])
scheme
串
- `callback` Function
- `redirectRequest` Object
- `url` String
- `method` String
- `session` Object (optional)
- `uploadData` Object (optional)
- `contentType` String - MIME type of the content.
- `data` String - Content to be sent.
completion
功能(可选)
注册一个scheme
会发送 HTTP 请求作为响应的协议。
用法是用相同的registerFileProtocol
,不同的是callback
应使用被称为redirectRequest
具有对象url
,method
,referrer
,uploadData
和session
特性。
默认情况下,HTTP 请求将重新使用当前会话。如果您希望请求具有不同的会话,您应该设置session
为null
。
对于 POST 请求,uploadData
必须提供对象。
protocol.unregisterProtocol(scheme[, completion])
scheme
串
取消注册自定义协议scheme
。
protocol.isProtocolHandled(scheme, callback)
scheme
串
在callback
将一个布尔值,表明是否已经有一个处理程序被调用scheme
。
protocol.interceptFileProtocol(scheme, handler[, completion])
scheme
串
- `callback` Function
- `filePath` String
completion
功能(可选)
拦截scheme
协议并将其handler
作为协议的新处理程序发送文件作为响应。
protocol.interceptStringProtocol(scheme, handler[, completion])
scheme
串
- `callback` Function
- `data` String (optional)
completion
功能(可选)
拦截scheme
协议并将其handler
作为协议的新处理程序发送String
作为响应。
protocol.interceptBufferProtocol(scheme, handler[, completion])
scheme
串
- `callback` Function
- `buffer` Buffer (optional)
completion
功能(可选)
拦截scheme
协议并将其handler
作为协议的新处理程序发送Buffer
作为响应。
protocol.interceptHttpProtocol(scheme, handler[, completion])
scheme
串
- `callback` Function
- `redirectRequest` Object
- `url` String
- `method` String
- `session` Object (optional)
- `uploadData` Object (optional)
- `contentType` String - MIME type of the content.
- `data` String - Content to be sent.
completion
功能(可选)
拦截scheme
协议并将其handler
作为协议的新处理程序发送新的 HTTP 请求作为响应。
protocol.uninterceptProtocol(scheme[, completion])
scheme
串
删除安装的拦截器scheme
并恢复其原始处理程序。