Electron中文手册
  • 文档概述
  • 开发指南目录
  • 构建说明(Linux)
  • 构建说明(macOS)
  • 构建说明(Windows)
  • 构建系统概述
  • 编码规范
  • 在 macOS 中调试
  • 在 Windows 中调试
  • 在C ++代码中使用clang-format
  • 在调试器中设置符号服务器
  • 源代码目录结构
  • Chrome升级清单
  • Chromium 开发指南
  • V8 开发指南
  • 教程目录
    • 关于 Electron
    • Electron 版本说明
    • API弃用说明
    • 快速入门
    • 支持的平台
    • 桌面环境集成
    • 系统通知
    • 离屏渲染
    • 在线/离线事件检测
    • 多线程
    • REPL
    • 键盘快捷键
    • DevTools扩展
    • 使用原生模块
    • 使用 Pepper Flash 插件
    • 使用 Selenium 和 WebDriver
    • 使用 Widevine CDM 插件
    • 应用分发
    • 应用打包
    • 主进程调试
    • 使用 node-inspector 进行主进程调试
    • 使用 VSCode 进行主进程调试
    • Mac App Store应用提交指南
    • Windows App Store应用提交指南
    • 安全,本地功能和你的责任
    • Headless CI Systems 测试
  • API接口目录
    • API接口之公用接口
      • 应用语言
      • 开发概要
      • 专业术语
      • 常见问题
      • 环境变量
      • 快捷键字符串
      • 命令行
      • 客户端请求
      • 剪贴板
      • <File> H5 File文件操作
      • 无框窗口
      • <window.open> window.open打开新窗口或打开时传递消息
      • 沙盒选项
    • API接口之主进程接口
      • 整体控制
      • 全局快捷键
      • 图标创建与应用
      • 屏幕
      • 窗口
      • 菜单
      • 菜单项
      • 系统托盘
      • 网页内容
      • 从主进程到渲染进程的异步通信
      • 对话框
      • 创建和控制视图
      • 会话
      • 会话,缓存和代理等控制
      • 页面请求
      • HTTP/HTTPS请求处理
      • 协议的注册和处理
      • 使用系统默认应用程序管理文件或URL
      • 下载项管理
      • 进程控制
      • Chromium原生网络库
      • 获取系统首选项
      • 电源状态
      • 节能管理
      • 调试工具
      • 奔溃报告
      • 性能数据收集
      • 自动更新
      • TouchBar触摸条
      • TouchBar触摸条按钮
      • TouchBar触摸条拾色器
      • TouchBar触摸条分组
      • TouchBar触摸条scrubber
      • TouchBar触摸条分段控件
      • TouchBar触摸条label标签
      • TouchBar触摸条弹出框
      • TouchBar触摸条滑块
      • TouchBar触摸条间隔符
    • API接口之渲染进程接口
      • 页面渲染
      • <webview> webview标签
      • 渲染进程与主进程通信
      • 从渲染进程到主进程的异步通信
      • 子窗口
      • 捕获桌面资源
  • 结构列表
    • 蓝牙设备对象
    • 证书对象
    • 证书主体对象
    • Cookie对象
    • 崩溃报告对象
    • 桌面捕获源对象
    • 显示器对象
    • 打印机信息对象
    • 文件过滤器对象
    • 最近使用的项目
    • 常用列表项
    • CPU使用率对象即程序占用的CPU资源
    • IO值对象
    • 内存信息对象
    • 进程内存信息对象
    • 内存使用详细信息
    • Mime类型缓冲区
    • 矩形对象
    • 删除客户端证书对象
    • 删除密码对象
    • Scrubber项对象
    • 分段控制对象
    • 快捷方式对象
    • 任务对象
    • 缩略图工具栏按钮对象
    • 上传blob对象
    • 上传数据对象
    • 上传文件系统对象
    • 上传文件对象
    • 上传原始数据对象
Powered by GitBook
On this page
  • 方法
  • protocol.registerStandardSchemes(schemes[, options])
  • protocol.registerServiceWorkerSchemes(schemes)
  • protocol.registerFileProtocol(scheme, handler[, completion])
  • protocol.registerBufferProtocol(scheme, handler[, completion])
  • protocol.registerStringProtocol(scheme, handler[, completion])
  • protocol.registerHttpProtocol(scheme, handler[, completion])
  • protocol.unregisterProtocol(scheme[, completion])
  • protocol.isProtocolHandled(scheme, callback)
  • protocol.interceptFileProtocol(scheme, handler[, completion])
  • protocol.interceptStringProtocol(scheme, handler[, completion])
  • protocol.interceptBufferProtocol(scheme, handler[, completion])
  • protocol.interceptHttpProtocol(scheme, handler[, completion])
  • protocol.uninterceptProtocol(scheme[, completion])

Was this helpful?

  1. API接口目录
  2. API接口之主进程接口

协议的注册和处理

PreviousHTTP/HTTPS请求处理Next使用系统默认应用程序管理文件或URL

Last updated 4 years ago

Was this helpful?

注册自定义协议并拦截现有协议请求

进程:

实现类似 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('无法注册协议')
  })
})

注意: 这个模块方法应用于 app 模块的 ready 事件之后

方法

protocol.registerStandardSchemes(schemes[, options])

用途:注册名为 schemes的标准协议

  • schemes String[] - 要注册为标准协议的自定义协议名.

  • options Object (可选)

    • secure Boolean (可选) - 是否使用安全协议,默认为 false.

注册标准协议后,在服务时可正确相关资源。否则行为类似file,但无法解析URL。例如,下文无法加载图像test.png,,因为非标准协议无法识别相对URL:

<body>
  <img src='test.png'>
</body>

注册为标准协议后,允许通过[系统文件API][file-system-api]访问文件。否则渲染器会抛出安全错误。

默认情况下,非标准协议禁用所有Web存储 API(localStorage,sessionStorage,webSQL,indexedDB,cookies)。

所以一般来说,如果你想注册一个自定义协议来代替http协议,你必须将它注册成标准协议:

const {app, protocol} = require('electron')
protocol.registerStandardSchemes(['atom'])
app.on('ready', () => {
  protocol.registerHttpProtocol('atom', '...')
})

注意: 以上方法必须在 app 模块的 ready 事件之前使用

protocol.registerServiceWorkerSchemes(schemes)

用途:注册名为 schemes的service workers自定义协议

  • schemes String[] - 要注册为service workers自定义协议的自定义协议名.

service worker是运行于浏览器后台的一种脚本,它可以无需Web页面或者用户交互就能提供额外的功能.通常用在离线开发上.

举个例子:比如断网了,你仍然可以使用本地缓存数据.

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

用途:注册名为 schemes的将发送文件作为响应的自定义协议

  • scheme String

  • handler Function

    • request Object

      • url String

      • referrer String

      • method String

    • callback Function

      • filePath String (可选)

  • completion Function (可选)

    • error Error

当使用 scheme创建一个 request时, handler将被 handler(request,callback)调用。

当 scheme 被成功注册或者完成(错误)时失败, completion(error)会使用 completion(null)来调用 completion。

要处理 request, callback应该用文件的路径或一个具有 path属性的对象来调用,例如: callback(filePath) 或 callback({path:filePath})。

默认情况下, scheme类似于 http:,它的解析方式不同于如 file:之类的 通用URI语法( generic URI syntax )协议.所以你或许应该调用 protocol.registerStandardSchemes 来创建一个标准协议。

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

用途:注册名为 schemes的将发送 Buffer作为响应的自定义协议

  • scheme String

  • handler Function

    • request Object

      • url String

      • referrer String

      • method String

    • callback Function

  • completion Function (可选)

    • error Error

用法类似 registerFileProtocol,除了 callback应该用具有 data, mimeType和 charset属性的 Buffer对象来调用.

const {protocol} = require('electron')
protocol.registerBufferProtocol('atom', (request, callback) => {
  callback({mimeType: 'text/html', data: new Buffer('<h5>回调响应</h5>')})
}, (error) => {
  if (error) console.error('无法注册协议')
})

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

用途:注册名为 schemes的将发送 String作为响应的自定义协议

  • scheme String

  • handler Function

    • request Object

      • url String

      • referrer String

      • method String

    • callback Function

      • data String (可选)

  • completion Function (可选)

    • error Error

用法类似 registerFileProtocol,除了 callback应该用 String 或一个 data, mimeType和 charset属性的对象来调用.

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

用途:注册名为 schemes的将发送 HTTP请求作为响应的自定义协议

  • scheme String

  • handler Function

    • request Object

      • url String

      • referrer String

      • method String

    • callback Function

      • redirectRequest Object

        • url String

        • method String

        • session Object (可选)

        • uploadData Object (可选)

          • contentType String - 内容的MIME类型

          • data String -要发送的内容

  • completion Function (可选)

    • error Error

注册一个 scheme 协议,用来发送 HTTP 请求作为响应.

用法类似 registerFileProtocol,除了 callback应该用具有 url, method, referrer, uploadData 和 session 属性的 redirectRequest对象来调用.

HTTP 请求默认使用当前 session .如果你想使用不同的session值,你应该设置 session 为 null.

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

protocol.unregisterProtocol(scheme[, completion])

用途:注销名为 scheme的自定义协议

  • scheme String

  • completion Function (可选)

    • error Error

protocol.isProtocolHandled(scheme, callback)

用途:判断是否已有一个处理 scheme协议的程序( Boolean)

  • scheme String

  • callback Function

    • error Error

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

用途:拦截 scheme协议并使用 handler(发送一个 文件作为响应)作为协议的新处理程序

  • scheme String

  • handler Function

    • request Object

      • url String

      • referrer String

      • method String

    • callback Function

      • filePath String

  • completion Function (可选)

    • error Error

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

用途:拦截 scheme协议并使用 handler(发送一个 String作为响应)作为协议的新处理程序

  • scheme String

  • handler Function

    • request Object

      • url String

      • referrer String

      • method String

    • callback Function

      • data String (可选)

  • completion Function (可选)

    • error Error

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

用途:拦截 scheme协议并使用 handler(发送一个 Buffer作为响应)作为协议的新处理程序

  • scheme String

  • handler Function

    • request Object

      • url String

      • referrer String

      • method String

    • callback Function

      • buffer Buffer (可选)

  • completion Function (可选)

    • error Error

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

用途:拦截 scheme协议并使用 handler(发送一个 HTTP请求作为响应)作为协议的新处理程序

  • scheme String

  • handler Function

    • request Object

      • url String

      • referrer String

      • method String

    • callback Function

      • redirectRequest Object

        • url String

        • method String

        • session Object (可选)

        • uploadData Object (可选)

          • contentType String - 内容的MIME类型

          • data String -要发送的内容

  • completion Function (可选)

    • error Error

protocol.uninterceptProtocol(scheme[, completion])

用途:删除为scheme协议安装的拦截器并恢复其原始处理程序

  • scheme String

  • completion Function (可选)

    • error Error

标准协议必须遵循RFC 3986调用。例如http和https是标准协议,而file不是。

uploadData

如果 callback为空或一个数字或存在error属性的对象, request 都将失败并显示为你指定的错误号,详见

uploadData

buffer (Buffer | ) (可选)

uploadData

uploadData

uploadData

uploadData

uploadData

uploadData

[file-system-api]:

通用URI语法
UploadData[]
错误号列表
UploadData[]
MimeTypedBuffer
UploadData[]
UploadData[]
UploadData[]
UploadData[]
UploadData[]
UploadData[]
https://developer.mozilla.org/en-US/docs/Web/API/LocalFileSystem
主进程