# protocol The `protocol` module can register a new protocol or intercept an existing protocol, so you can custom the response to the requests for various protocols. An example of implementing a protocol that has the same effect with the `file://` protocol: ```javascript var app = require('app'), path = require('path'); app.on('will-finish-launching', function() { var protocol = require('protocol'); protocol.registerProtocol('atom', function(request) { var url = request.url.substr(7) return new protocol.RequestFileJob(path.normalize(__dirname + '/' + url)); }); }); ``` **Note:** This module can only be used after the `will-finish-launching` event was emitted. ## protocol.registerProtocol(scheme, handler) * `scheme` String * `handler` Function Registers a custom protocol of `scheme`, the `handler` would be called with `handler(request)` when the a request with registered `scheme` is made. You need to return a request job in the `handler` to specify which type of response you would like to send. ## protocol.unregisterProtocol(scheme) * `scheme` String Unregisters the custom protocol of `scheme`. ## protocol.isHandledProtocol(scheme) * `scheme` String Returns whether the `scheme` can be handled already. ## protocol.interceptProtocol(scheme, handler) * `scheme` String * `handler` Function Intercepts an existing protocol with `scheme`, returning `null` or `undefined` in `handler` would use the original protocol handler to handle the request. ## protocol.uninterceptProtocol(scheme) * `scheme` String Unintercepts a protocol. ## Class: protocol.RequestFileJob(path) * `path` String Create a request job which would query a file of `path` and set corresponding mime types. ## Class: protocol.RequestStringJob(options) * `options` Object * `mimeType` String - Default is `text/plain` * `charset` String - Default is `UTF-8` * `data` String Create a request job which sends a string as response.