在线文档教程

协议 | 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') }) })

注意:除非指定,否则所有方法只能readyapp模块事件发出后使用。

方法

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', '...') })

注意:此方法只能readyapp模块事件发出之前使用。

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)

为了处理requestcallback应该用文件的路径或者具有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具有“ datamimeType”和“ 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具有“ datamimeType”和“ 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具有对象urlmethodreferreruploadDatasession特性。

默认情况下,HTTP 请求将重新使用当前会话。如果您希望请求具有不同的会话,您应该设置sessionnull

对于 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并恢复其原始处理程序。