| 
									
										
										
										
											2013-09-09 15:35:57 +08:00
										 |  |  | # protocol
 | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | The `protocol` module can register a custom protocol or intercept an existing | 
					
						
							|  |  |  | protocol. | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | An example of implementing a protocol that has the same effect as the | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | `file://` protocol: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```javascript | 
					
						
							| 
									
										
										
										
											2015-11-12 21:20:09 +08:00
										 |  |  | const electron = require('electron'); | 
					
						
							|  |  |  | const app = electron.app; | 
					
						
							|  |  |  | const path = require('path'); | 
					
						
							| 
									
										
										
										
											2014-05-18 06:33:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-24 17:26:12 +05:30
										 |  |  | app.on('ready', function() { | 
					
						
							| 
									
										
										
										
											2015-11-12 21:20:09 +08:00
										 |  |  |     var protocol = electron.protocol; | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  |     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') | 
					
						
							| 
									
										
										
										
											2014-05-18 06:33:10 -04:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | }); | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-01 19:08:31 -07:00
										 |  |  | **Note:** This module can only be used after the `ready` event in the `app` | 
					
						
							|  |  |  | module is emitted. | 
					
						
							| 
									
										
										
										
											2013-09-20 18:36:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | ## Methods
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The `protocol` module has the following methods: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### `protocol.registerStandardSchemes(schemes)`
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | * `schemes` Array - Custom schemes to be registered as standard schemes. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | A standard `scheme` adheres to what RFC 3986 calls | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | [generic URI syntax](https://tools.ietf.org/html/rfc3986#section-3). This | 
					
						
							|  |  |  | includes `file:` and `filesystem:`. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-09 00:51:46 +05:30
										 |  |  | ### `protocol.registerServiceWorkerSchemes(schemes)`
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * `schemes` Array - Custom schemes to be registered to handle service workers. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | ### `protocol.registerFileProtocol(scheme, handler[, completion])`
 | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | * `scheme` String | 
					
						
							|  |  |  | * `handler` Function | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | * `completion` Function (optional) | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-01 19:08:31 -07:00
										 |  |  | Registers a protocol of `scheme` that will send the file as a response. The | 
					
						
							|  |  |  | `handler` will be called with `handler(request, callback)` when a `request` is | 
					
						
							|  |  |  | going to be created with `scheme`. `completion` will be called with | 
					
						
							|  |  |  | `completion(null)` when `scheme` is successfully registered or | 
					
						
							|  |  |  | `completion(error)` when failed. | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-28 18:59:07 +08:00
										 |  |  | * `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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | To handle the `request`, the `callback` should be called with either the file's | 
					
						
							|  |  |  | path or an object that has a `path` property, e.g. `callback(filePath)` or | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | `callback({path: filePath})`. | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | When `callback` is called with nothing, a number, or an object that has an | 
					
						
							|  |  |  | `error` property, the `request` will fail with the `error` number you | 
					
						
							| 
									
										
										
										
											2015-09-01 19:08:31 -07:00
										 |  |  | specified. For the available error numbers you can use, please see the | 
					
						
							| 
									
										
										
										
											2016-01-28 18:59:07 +08:00
										 |  |  | [net error list][net-error]. | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | By default the `scheme` is treated like `http:`, which is parsed differently | 
					
						
							| 
									
										
										
										
											2015-09-01 19:08:31 -07:00
										 |  |  | than protocols that follow the "generic URI syntax" like `file:`, so you | 
					
						
							|  |  |  | probably want to call `protocol.registerStandardSchemes` to have your scheme | 
					
						
							|  |  |  | treated as a standard scheme. | 
					
						
							| 
									
										
										
										
											2015-07-16 06:32:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | ### `protocol.registerBufferProtocol(scheme, handler[, completion])`
 | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | * `scheme` String | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | * `handler` Function | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | * `completion` Function (optional) | 
					
						
							| 
									
										
										
										
											2015-06-12 13:28:23 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-28 18:59:07 +08:00
										 |  |  | Registers a protocol of `scheme` that will send a `Buffer` as a response. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The usage is the same with `registerFileProtocol`, except that the `callback` | 
					
						
							|  |  |  | should be called with either a `Buffer` object or an object that has the `data`, | 
					
						
							|  |  |  | `mimeType`, and `charset` properties. | 
					
						
							| 
									
										
										
										
											2015-06-12 13:28:23 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | Example: | 
					
						
							| 
									
										
										
										
											2015-07-16 06:32:09 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | ```javascript | 
					
						
							|  |  |  | 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') | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2015-06-12 13:28:23 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | ### `protocol.registerStringProtocol(scheme, handler[, completion])`
 | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | * `scheme` String | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | * `handler` Function | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | * `completion` Function (optional) | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-28 18:59:07 +08:00
										 |  |  | Registers a protocol of `scheme` that will send a `String` as a response. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The usage is the same with `registerFileProtocol`, except that the `callback` | 
					
						
							|  |  |  | should be called with either a `String` or an object that has the `data`, | 
					
						
							|  |  |  | `mimeType`, and `charset` properties. | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | ### `protocol.registerHttpProtocol(scheme, handler[, completion])`
 | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | * `scheme` String | 
					
						
							|  |  |  | * `handler` Function | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | * `completion` Function (optional) | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | Registers a protocol of `scheme` that will send an HTTP request as a response. | 
					
						
							| 
									
										
										
										
											2016-01-28 18:59:07 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | The usage is the same with `registerFileProtocol`, except that the `callback` | 
					
						
							|  |  |  | should be called with a `redirectRequest` object that has the `url`, `method`, | 
					
						
							| 
									
										
										
										
											2015-12-06 15:27:02 -05:00
										 |  |  | `referrer`, `uploadData` and `session` properties. | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-28 18:59:07 +08:00
										 |  |  | * `redirectRequest` Object | 
					
						
							|  |  |  |   * `url` String | 
					
						
							|  |  |  |   * `method` String | 
					
						
							|  |  |  |   * `session` Object (optional) | 
					
						
							| 
									
										
										
										
											2016-01-28 18:59:58 +08:00
										 |  |  |   * `uploadData` Object (optional) | 
					
						
							| 
									
										
										
										
											2016-01-28 18:59:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | By default the HTTP request will reuse the current session. If you want the | 
					
						
							|  |  |  | request to have a different session you should set `session` to `null`. | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-28 18:59:07 +08:00
										 |  |  | For POST requests the `uploadData` object must be provided. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-06 15:27:02 -05:00
										 |  |  | * `uploadData` object | 
					
						
							|  |  |  |   * `contentType` String - MIME type of the content. | 
					
						
							| 
									
										
										
										
											2016-01-28 18:59:07 +08:00
										 |  |  |   * `data` String - Content to be sent. | 
					
						
							| 
									
										
										
										
											2015-12-06 15:27:02 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | ### `protocol.unregisterProtocol(scheme[, completion])`
 | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | * `scheme` String | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | * `completion` Function (optional) | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | Unregisters the custom protocol of `scheme`. | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | ### `protocol.isProtocolHandled(scheme, callback)`
 | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | * `scheme` String | 
					
						
							|  |  |  | * `callback` Function | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | The `callback` will be called with a boolean that indicates whether there is | 
					
						
							|  |  |  | already a handler for `scheme`. | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | ### `protocol.interceptFileProtocol(scheme, handler[, completion])`
 | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | * `scheme` String | 
					
						
							|  |  |  | * `handler` Function | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | * `completion` Function (optional) | 
					
						
							| 
									
										
										
										
											2013-09-03 18:22:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | Intercepts `scheme` protocol and uses `handler` as the protocol's new handler | 
					
						
							|  |  |  | which sends a file as a response. | 
					
						
							| 
									
										
										
										
											2015-03-16 18:23:45 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | ### `protocol.interceptStringProtocol(scheme, handler[, completion])`
 | 
					
						
							| 
									
										
										
										
											2015-03-16 18:23:45 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | * `scheme` String | 
					
						
							|  |  |  | * `handler` Function | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | * `completion` Function (optional) | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | Intercepts `scheme` protocol and uses `handler` as the protocol's new handler | 
					
						
							|  |  |  | which sends a `String` as a response. | 
					
						
							| 
									
										
										
										
											2015-03-16 18:23:45 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-08 11:14:04 +08:00
										 |  |  | ### `protocol.interceptBufferProtocol(scheme, handler[, completion])`
 | 
					
						
							| 
									
										
										
										
											2015-05-07 13:12:35 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | * `scheme` String | 
					
						
							|  |  |  | * `handler` Function | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | * `completion` Function (optional) | 
					
						
							| 
									
										
										
										
											2015-06-17 11:32:39 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | Intercepts `scheme` protocol and uses `handler` as the protocol's new handler | 
					
						
							|  |  |  | which sends a `Buffer` as a response. | 
					
						
							| 
									
										
										
										
											2015-06-17 11:32:39 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-08 11:14:04 +08:00
										 |  |  | ### `protocol.interceptHttpProtocol(scheme, handler[, completion])`
 | 
					
						
							| 
									
										
										
										
											2015-06-17 11:32:39 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | * `scheme` String | 
					
						
							|  |  |  | * `handler` Function | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | * `completion` Function (optional) | 
					
						
							| 
									
										
										
										
											2015-05-07 13:12:35 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-28 22:03:39 -07:00
										 |  |  | Intercepts `scheme` protocol and uses `handler` as the protocol's new handler | 
					
						
							|  |  |  | which sends a new HTTP request as a response. | 
					
						
							| 
									
										
										
										
											2015-05-07 13:12:35 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-08 11:14:04 +08:00
										 |  |  | ### `protocol.uninterceptProtocol(scheme[, completion])`
 | 
					
						
							| 
									
										
										
										
											2015-05-07 13:12:35 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | * `scheme` String | 
					
						
							| 
									
										
										
										
											2015-08-21 20:16:56 +08:00
										 |  |  | * `completion` Function | 
					
						
							| 
									
										
										
										
											2015-05-07 13:12:35 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-14 13:44:18 +08:00
										 |  |  | Remove the interceptor installed for `scheme` and restore its original handler. | 
					
						
							| 
									
										
										
										
											2016-01-28 18:59:07 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | [net-error]: https://code.google.com/p/chromium/codesearch#chromium/src/net/base/net_error_list.h |