协议

注册一个自定义协议,或者使用一个已经存在的协议。

进程: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')
  })
})

注意:这个模块只有在app模块的ready事件触发之后才可使用。

方法

protocol模块有如下方法:

protocol.registerStandardSchemes(schemes[, options])

  • schemesString[] - 将一个自定义的方案注册为标准的方案。
  • optionsObject (可选)
    • secureBoolean (可选) -true将方案注册为安全。 默认值false

一个标准的scheme遵循 RFC 3986 的generic URI syntax标准。例如httphttps是标准方案,而file不是。

注册一个scheme作为标准,将允许相对和绝对的资源 在服务时正确解析。 否则该方案将表现得像file协议,但无法解析相对 URLs。

例如,当你加载以下页面与自定义协议无法 注册为标准scheme,图像将不会加载,因为 非标准方案无法识别相对 URLs:

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

注册方案作为标准将允许通过访问文件FileSystem API。 否则渲染器将抛出一个安全性 错误。

默认情况下 web storage apis(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)

  • schemesString[] - 将一个自定义的方案注册为处理 service workers。

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

  • schemeString
  • handlerFunction
    • requestObject
      • urlString
      • referrerString
      • methodString
      • uploadDataUploadData[]
    • callbackFunction
      • filePathString (可选)
  • completionFunction (可选)
    • errorError

注册一个协议,用来发送响应文件。当通过这个协议来发起一个请求的时候,将使用handler(request,callback)来调用handler。当scheme被成功注册或者完成(错误)时失败,将使用completion(null)调用completion

为了处理请求,调用callback时需要使用文件路径或者一个带path参数的对象, 例如callback(filePath)callback({path: filePath})

当不使用任何参数调用callback时,你可以指定一个数字或一个带有error参数的对象,来标识request失败。你可以使用的 error number 可以参考net error list

默认scheme会被注册为一个http:协议,它与遵循 "generic URI syntax" 规则的协议解析不同,例如file:,所以你或许应该调用protocol.registerStandardSchemes来创建一个标准的 scheme。

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

  • schemeString
  • handlerFunction
    • requestObject
      • urlString
      • referrerString
      • methodString
      • uploadDataUploadData[]
    • callbackFunction
  • completionFunction (可选)
    • errorError

注册一个scheme协议,用来发送响应Buffer

这个方法的用法类似registerFileProtocol,除非使用一个Buffer对象,或一个有datamimeTypecharset属性的对象来调用callback

例子:

const {protocol} = require('electron')

protocol.registerBufferProtocol('atom', (request, callback) => {
  callback({mimeType: 'text/html', data: new Buffer('<h5>Response</h5>')})
}, (error) => {
  if (error) console.error('Failed to register protocol')
})

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

  • schemeString
  • handlerFunction
    • requestObject
      • urlString
      • referrerString
      • methodString
      • uploadDataUploadData[]
    • callbackFunction
      • dataString (可选)
  • completionFunction (可选)
    • errorError

注册一个scheme协议,用来发送响应String

这个方法的用法类似registerFileProtocol,除非使用一个String对象,或一个有datamimeTypecharset属性的对象来调用callback

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

  • schemeString
  • handlerFunction
    • requestObject
      • urlString
      • referrerString
      • methodString
      • uploadDataUploadData[]
    • callbackFunction
      • redirectRequestObject
        • urlString
        • methodString
        • sessionObject (可选)
        • uploadDataObject (可选)
          • contentTypeString - MIME type of the content.
          • dataString - Content to be sent.
  • completionFunction (可选)
    • errorError

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

这个方法的用法类似registerFileProtocol,除非使用一个redirectRequest对象,或一个有urlmethodreferreruploadDatasession属性的对象来调用callback

默认这个 HTTP 请求会使用当前 session。如果你想使用不同的session值,你应该设置sessionnull

POST 请求应当包含uploadData对象。

protocol.unregisterProtocol(scheme[, completion])

  • schemeString
  • completionFunction (可选)
    • errorError

注销自定义协议scheme

protocol.isProtocolHandled(scheme, callback)

  • schemeString
  • callbackFunction
    • errorError

将使用一个布尔值来调用callback,这个布尔值标识了是否已经存在scheme的句柄了。

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

  • schemeString
  • handlerFunction
    • requestObject
      • urlString
      • referrerString
      • methodString
      • uploadDataUploadData[]
    • callbackFunction
      • filePathString
  • completionFunction (可选)
    • errorError

拦截scheme协议并且使用handler作为协议的新的句柄来发送响应文件。

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

  • schemeString
  • handlerFunction
    • requestObject
      • urlString
      • referrerString
      • methodString
      • uploadDataUploadData[]
    • callbackFunction
      • dataString (可选)
  • completionFunction (可选)
    • errorError

拦截scheme协议并且使用handler作为协议的新的句柄来发送响应String

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

  • schemeString
  • handlerFunction
    • requestObject
      • urlString
      • referrerString
      • methodString
      • uploadDataUploadData[]
    • callbackFunction
      • bufferBuffer (可选)
  • completionFunction (可选)
    • errorError

拦截scheme协议并且使用handler作为协议的新的句柄来发送响应Buffer

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

  • schemeString
  • handlerFunction
    • requestObject
      • urlString
      • referrerString
      • methodString
      • uploadDataUploadData[]
    • callbackFunction
      • redirectRequestObject
        • urlString
        • methodString
        • sessionObject (可选)
        • uploadDataObject (可选)
          • contentTypeString - MIME type of the content.
          • dataString - Content to be sent.
  • completionFunction (可选)
    • errorError

拦截scheme协议并且使用handler作为协议的新的句柄来发送新的响应 HTTP 请求。

protocol.uninterceptProtocol(scheme[, completion])

  • schemeString
  • completionFunction (可选)
    • errorError

取消对scheme的拦截,使用它的原始句柄进行处理。

results matching ""

    No results matching ""