protocol

protocol 모듈은 이미 있는 프로토콜의 동작을 가로채거나 새로운 프로토콜을 만들 수 있는 기능을 제공합니다.

다음 예제는 file:// 프로토콜과 비슷한 일을 하는 커스텀 프로토콜을 설정합니다:

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')
    });
});

참고: 이 모듈은 app 모듈의 ready 이벤트가 발생한 이후에만 사용할 수 있습니다.

Methods

protocol 모듈은 다음과 같은 메서드를 가지고 있습니다:

protocol.registerStandardSchemes(schemes)

  • schemes Array - 표준 스킴으로 등록할 커스텀 스킴 리스트

표준 scheme의 형식은 RFC 3986 일반 URI 구문 표준을 따릅니다. 이 형식은 file:filesystem:을 포함합니다.

protocol.registerServiceWorkerSchemes(schemes)

  • schemes Array - 등록될 서비스 워커를 조작할 커스텀 스키마

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

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

scheme에 파일을 응답으로 보내는 프로토콜을 등록합니다. handlerscheme와 함께 request가 생성될 때 handler(request, callback) 형식으로 호출됩니다. completion 콜백은 scheme가 성공적으로 등록되었을 때 completion(null) 형식으로 호출되고, 등록에 실패했을 땐 completion(error) 형식으로 에러 내용을 담아 호출됩니다.

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

The uploadData is an array of data objects:

  • data Object
    • bytes Buffer - Content being sent.
    • file String - Path of file being uploaded.

request를 처리할 때 반드시 파일 경로 또는 path 속성을 포함하는 객체를 인자에 포함하여 callback을 호출해야 합니다. 예: callback(filePath) 또는 callback({path: filePath}).

만약 callback이 아무 인자도 없이 호출되거나 숫자나 error 프로퍼티를 가진 객체가 인자로 전달될 경우 request는 지정한 error 코드(숫자)를 출력합니다. 사용할 수 있는 에러 코드는 네트워크 에러 목록에서 확인할 수 있습니다.

기본적으로 schemehttp:와 같이 처리됩니다. file:과 같이 "일반적인 URI 문법" 과는 다르게 인식되는 프로토콜은 protocol.registerStandardSchemes을 사용하여 표준 스킴으로 처리되도록 할 수 있습니다.

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

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

Buffer를 응답으로 전송하는 scheme의 프로토콜을 등록합니다.

사용법은 callback이 반드시 Buffer 객체 또는 data, mimeType, charset 속성을 포함하는 객체와 함께 호출되어야 한다는 점을 제외하면 registerFileProtocol과 사용법이 같습니다.

예제:

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 (optional)

String을 응답으로 전송할 scheme의 프로토콜을 등록합니다.

사용법은 callback이 반드시 String 또는 data, mimeType, charset 속성을 포함하는 객체와 함께 호출되어야 한다는 점을 제외하면 registerFileProtocol과 사용법이 같습니다.

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

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

HTTP 요청을 응답으로 전송할 scheme의 프로토콜을 등록합니다.

사용법은 callback이 반드시 url, method, referrer, uploadDatasession 속성을 포함하는 redirectRequest 객체와 함께 호출되어야 한다는 점을 제외하면 registerFileProtocol과 사용법이 같습니다.

  • redirectRequest Object
    • url String
    • method String
    • session Object (optional)
    • uploadData Object (optional)

기본적으로 HTTP 요청은 현재 세션을 재사용합니다. 만약 서로 다른 세션에 요청을 보내고 싶으면 sessionnull로 지정해야 합니다.

POST 요청에는 반드시 uploadData 객체가 제공되어야 합니다.

  • uploadData object
    • contentType String - 컨텐츠의 MIME 타입.
    • data String - 전송할 컨텐츠.

protocol.unregisterProtocol(scheme[, completion])

  • scheme String
  • completion Function (optional)

scheme의 커스텀 프로토콜 등록을 해제합니다.

protocol.isProtocolHandled(scheme, callback)

  • scheme String
  • callback Function

scheme에 동작(handler)이 등록되어 있는지 여부를 확인합니다. callback으로 결과(boolean)가 반환됩니다.

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

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

scheme 프로토콜을 가로채고 handler를 파일 전송에 대한 새로운 동작으로 사용합니다.

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

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

scheme 프로토콜을 가로채고 handler를 문자열 전송에 대한 새로운 동작으로 사용합니다.

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

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

scheme 프로토콜을 가로채고 handlerBuffer 전송에 대한 새로운 동작으로 사용합니다.

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

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

scheme 프로토콜을 가로채고 handler를 HTTP 프로토콜의 요청에 대한 새로운 동작으로 사용합니다.

protocol.uninterceptProtocol(scheme[, completion])

  • scheme String
  • completion Function (optional)

가로챈 scheme를 삭제하고 기본 핸들러로 복구합니다.