Electron protocol 模塊

2019-08-14 19:21 更新

protocol 模塊可以注冊(cè)一個(gè)自定義協(xié)議,或者使用一個(gè)已經(jīng)存在的協(xié)議.

例子,使用一個(gè)與 file:// 功能相似的協(xié)議 :

const electron = require('electron');
const app = electron.app;
const path = require('path');

app.on('ready', function() {
    var protocol = electron.protocol;
    protocol.registerFileProtocol('atom', function(request, callback) {
      var url = request.url.substr(7);
      callback({path: path.normalize(__dirname + '/' + url)});
    }, function (error) {
      if (error)
        console.error('Failed to register protocol')
    });
});

注意: 這個(gè)模塊只有在 app 模塊的 ready 事件觸發(fā)之后才可使用.

方法

protocol 模塊有如下方法:

protocol.registerStandardSchemes(schemes)

  • schemes Array - 將一個(gè)自定義的方案注冊(cè)為標(biāo)準(zhǔn)的方案.

一個(gè)標(biāo)準(zhǔn)的 scheme 遵循 RFC 3986 的 generic URI syntax 標(biāo)準(zhǔn). 這包含了 file: 和 filesystem:.

protocol.registerServiceWorkerSchemes(schemes)

  • schemes Array - 將一個(gè)自定義的方案注冊(cè)為處理 service workers.

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

  • scheme String
  • handler Function
  • completion Function (可選)

注冊(cè)一個(gè)協(xié)議,用來發(fā)送響應(yīng)文件.當(dāng)通過這個(gè)協(xié)議來發(fā)起一個(gè)請(qǐng)求的時(shí)候,將使用 handler(request, callback) 來調(diào)用 handler .當(dāng) scheme 被成功注冊(cè)或者完成(錯(cuò)誤)時(shí)失敗,將使用 completion(null) 調(diào)用 completion.

  • request Object
    • url String
    • referrer String
    • method String
    • uploadData Array (可選)
  • callback Function

uploadData 是一個(gè) data 對(duì)象數(shù)組:

  • data Object
    • bytes Buffer - 被發(fā)送的內(nèi)容.
    • file String - 上傳的文件路徑.

為了處理請(qǐng)求,調(diào)用 callback 時(shí)需要使用文件路徑或者一個(gè)帶 path 參數(shù)的對(duì)象, 例如 callback(filePath) 或 callback({path: filePath}).

當(dāng)不使用任何參數(shù)調(diào)用 callback 時(shí),你可以指定一個(gè)數(shù)字或一個(gè)帶有 error 參數(shù)的對(duì)象,來標(biāo)識(shí) request 失敗.你可以使用的 error number 可以參考 net error list.

默認(rèn) scheme 會(huì)被注冊(cè)為一個(gè) http: 協(xié)議,它與遵循 "generic URI syntax" 規(guī)則的協(xié)議解析不同,例如 file: ,所以你或許應(yīng)該調(diào)用 protocol.registerStandardSchemes 來創(chuàng)建一個(gè)標(biāo)準(zhǔn)的 scheme.

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

  • scheme String
  • handler Function
  • completion Function (可選)

注冊(cè)一個(gè) scheme 協(xié)議,用來發(fā)送響應(yīng) Buffer .

這個(gè)方法的用法類似 registerFileProtocol,除非使用一個(gè) Buffer 對(duì)象,或一個(gè)有 datamimeType, 和 charset 屬性的對(duì)象來調(diào)用 callback .

例子:

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

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

  • scheme String
  • handler Function
  • completion Function (可選)

注冊(cè)一個(gè) scheme 協(xié)議,用來發(fā)送響應(yīng) String .

這個(gè)方法的用法類似 registerFileProtocol,除非使用一個(gè) String 對(duì)象,或一個(gè)有 data, mimeType, 和 charset 屬性的對(duì)象來調(diào)用 callback .

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

  • scheme String
  • handler Function
  • completion Function (可選)

注冊(cè)一個(gè) scheme 協(xié)議,用來發(fā)送 HTTP 請(qǐng)求作為響應(yīng).

這個(gè)方法的用法類似 registerFileProtocol,除非使用一個(gè) redirectRequest 對(duì)象,或一個(gè)有 url, method, referrer, uploadData  session 屬性的對(duì)象來調(diào)用 callback .

  • redirectRequest Object
    • url String
    • method String
    • session Object (可選)
    • uploadData Object (可選)

默認(rèn)這個(gè) HTTP 請(qǐng)求會(huì)使用當(dāng)前 session .如果你想使用不同的session值,你應(yīng)該設(shè)置 session  null.

POST 請(qǐng)求應(yīng)當(dāng)包含 uploadData 對(duì)象.

  • uploadData object
    • contentType String - 內(nèi)容的 MIME type.
    • data String - 被發(fā)送的內(nèi)容.

protocol.unregisterProtocol(scheme[, completion])

  • scheme String
  • completion Function (可選)

注銷自定義協(xié)議 scheme.

protocol.isProtocolHandled(scheme, callback)

  • scheme String
  • callback Function

將使用一個(gè)布爾值來調(diào)用 callback ,這個(gè)布爾值標(biāo)識(shí)了是否已經(jīng)存在 scheme 的句柄了.

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

  • scheme String
  • handler Function
  • completion Function (可選)

攔截 scheme 協(xié)議并且使用 handler 作為協(xié)議的新的句柄來發(fā)送響應(yīng)文件.

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

  • scheme String
  • handler Function
  • completion Function (可選)

攔截 scheme 協(xié)議并且使用 handler 作為協(xié)議的新的句柄來發(fā)送響應(yīng) String.

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

  • scheme String
  • handler Function
  • completion Function (可選)

攔截 scheme 協(xié)議并且使用 handler 作為協(xié)議的新的句柄來發(fā)送響應(yīng) Buffer.

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

  • scheme String
  • handler Function
  • completion Function (optional)

攔截 scheme 協(xié)議并且使用 handler 作為協(xié)議的新的句柄來發(fā)送新的響應(yīng) HTTP 請(qǐng)求. Intercepts schemeprotocol and uses handler as the protocol's new handler which sends a new HTTP request as a response.

protocol.uninterceptProtocol(scheme[, completion])

  • scheme String
  • completion Function 取消對(duì) scheme 的攔截,使用它的原始句柄進(jìn)行處理.
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)