非常教程

Electron参考手册

协议 | protocol

协议 | 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 字符串[] - 自定义方案被注册为标准方案。
  • options 对象(可选)
    • secure布尔(可选) - true将该方案注册为安全。默认false

标准方案遵循 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
  • handler 功能
    • request 目的
      • url
      • referrer
      • method
      • uploadData UploadData []
-  `callback` Function 
    -  `filePath` String (optional)
  • completion 功能(可选)
    • error 错误

注册该协议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
  • handler 功能
    • request 目的
      • url
      • referrer
      • method
      • uploadData UploadData []
-  `callback` Function 
    -  `buffer` (Buffer | [MimeTypedBuffer](../structures/mime-typed-buffer/index)) (optional)
  • completion 功能(可选)
    • error 错误

注册该协议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
  • handler 功能
    • request 目的
      • url
      • referrer
      • method
      • uploadData UploadData []
-  `callback` Function 
    -  `data` String (optional)
  • completion 功能(可选)
    • error 错误

注册该协议scheme将发送String回应。

registerFileProtocol除了callback应该使用String具有“ datamimeType”和“ charset属性” 的对象或对象来调用之外,其用法与此相同。

protocol.registerHttpProtocol(scheme, handler[, completion])

  • scheme
  • handler 功能
    • request 目的
      • url
      • referrer
      • method
      • uploadData UploadData []
-  `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 功能(可选)
    • error 错误

注册一个scheme会发送 HTTP 请求作为响应的协议。

用法是用相同的registerFileProtocol,不同的是callback应使用被称为redirectRequest具有对象urlmethodreferreruploadDatasession特性。

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

对于 POST 请求,uploadData必须提供对象。

protocol.unregisterProtocol(scheme[, completion])

  • scheme
  • completion 功能(可选)
    • error 错误

取消注册自定义协议scheme

protocol.isProtocolHandled(scheme, callback)

  • scheme
  • callback 功能
    • error 错误

callback将一个布尔值,表明是否已经有一个处理程序被调用scheme

protocol.interceptFileProtocol(scheme, handler[, completion])

  • scheme
  • handler 功能
    • request 目的
      • url
      • referrer
      • method
      • uploadData UploadData []
-  `callback` Function 
    -  `filePath` String
  • completion 功能(可选)
    • error 错误

拦截scheme协议并将其handler作为协议的新处理程序发送文件作为响应。

protocol.interceptStringProtocol(scheme, handler[, completion])

  • scheme
  • handler 功能
    • request 目的
      • url
      • referrer
      • method
      • uploadData UploadData []
-  `callback` Function 
    -  `data` String (optional)
  • completion 功能(可选)
    • error 错误

拦截scheme协议并将其handler作为协议的新处理程序发送String作为响应。

protocol.interceptBufferProtocol(scheme, handler[, completion])

  • scheme
  • handler 功能
    • request 目的
      • url
      • referrer
      • method
      • uploadData UploadData []
-  `callback` Function 
    -  `buffer` Buffer (optional)
  • completion 功能(可选)
    • error 错误

拦截scheme协议并将其handler作为协议的新处理程序发送Buffer作为响应。

protocol.interceptHttpProtocol(scheme, handler[, completion])

  • scheme
  • handler 功能
    • request 目的
      • url
      • referrer
      • method
      • uploadData UploadData []
-  `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 功能(可选)
    • error 错误

拦截scheme协议并将其handler作为协议的新处理程序发送新的 HTTP 请求作为响应。

protocol.uninterceptProtocol(scheme[, completion])

  • scheme
  • completion 功能(可选)
    • error 错误

删除安装的拦截器scheme并恢复其原始处理程序。

协议 | protocol相关

Electron

Electron 是一个使用 JavaScript, HTML 和 CSS 等 Web 技术创建原生程序的框架,它负责比较难搞的部分,你只需把精力放在你的应用的核心上即可。

主页 https://electron.atom.io/
源码 https://github.com/electron/electron
发布版本 1.7.9

Electron目录

1.指南 | Guides
2.指南·开发 | Guides: Development
3.Webview 组件 |
4.加速器 | Accelerator
5.API
6.API·对象 | API·Objects
7.app
8.autoUpdater
9.浏览器总览 | BrowserView
10.浏览器窗口 | BrowserWindow
11.浏览器窗口代理 | BrowserWindowProxy)
12.ClientRequest
13.剪贴板 | clipboard
14.内容追踪 | contentTracing
15.小型文字档案 | Cookies
16.crashReporter
17.调试器 | Debugger
18.desktopCapturer
19.dialog
20.电子下载 | DownloadItem
21.环境变量 | Environment Variables
22.无框窗口 | Frameless Window
23.globalShortcut
24.IncomingMessage
25.ipcMain
26.IPC渲染器 | ipcRenderer
27.语言环境 | Locales
28.画面 | Menu
29.MenuItem
30.本地图像 | nativeImage
31.net
32.通知 | Notification
33.权限监控 | powerMonitor
34.权限存储拦截器 | powerSaveBlocker
35.处理 | process
36.协议 | protocol
37.远程 | remote
38.sandbox
39.屏幕 | screen
40.会话 | session
41.shell
42.系统表现 | systemPreferences
43.触摸板 | TouchBar
44.触摸板按钮 | TouchBarButton
45.触摸板颜色选择器 | TouchBarColorPicker
46.触摸板组 | TouchBarGroup
47.触摸板标签 | TouchBarLabel
48.触摸板弹出框 | TouchBarPopover
49.触摸板清理 | TouchBarScrubber
50.触摸板分段控制 | TouchBarSegmentedControl
51.触摸板滑块 | TouchBarSlider
52.触摸板间隔 | TouchBarSpacer
53.Tray
54.网页内容 | webContents
55.网页框架 | webFrame
56.网页要求 | WebRequest
57.窗口开启 | window.open