mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
refactor: use browser-compliant interface of 'ws' (#3218)
Bundled version of Puppeteer should rely on native WebSocket.
Luckily, 'ws' module supports the same interface as the native
browser websockets. This patch switches WebSocketTransport to
use the browser-compliant interface of 'ws'.
After this patch, I was able to bundle Puppeteer for browser
using the following config in `package.json`:
```json
"browser": {
"./lib/BrowserFetcher.js": false,
"ws": "./lib/BrowserWebSocket",
"fs": false,
"child_process": false,
"rimraf": false,
"readline": false
}
```
where `./lib/BrowserWebSocket` is:
```js
module.exports = WebSocket;
```
and the bundling command is:
```sh
$ browserify -r ./index.js:puppeteer > ppweb.js
```
References #2119
This commit is contained in:
@@ -25,9 +25,9 @@ class WebSocketTransport {
|
|||||||
*/
|
*/
|
||||||
static create(url) {
|
static create(url) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const ws = new WebSocket(url, { perMessageDeflate: false });
|
const ws = new WebSocket(url, [], { perMessageDeflate: false });
|
||||||
ws.on('open', () => resolve(new WebSocketTransport(ws)));
|
ws.addEventListener('open', () => resolve(new WebSocketTransport(ws)));
|
||||||
ws.on('error', reject);
|
ws.addEventListener('error', reject);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,16 +36,16 @@ class WebSocketTransport {
|
|||||||
*/
|
*/
|
||||||
constructor(ws) {
|
constructor(ws) {
|
||||||
this._ws = ws;
|
this._ws = ws;
|
||||||
this._ws.on('message', event => {
|
this._ws.addEventListener('message', event => {
|
||||||
if (this.onmessage)
|
if (this.onmessage)
|
||||||
this.onmessage.call(null, event);
|
this.onmessage.call(null, event.data);
|
||||||
});
|
});
|
||||||
this._ws.on('close', event => {
|
this._ws.addEventListener('close', event => {
|
||||||
if (this.onclose)
|
if (this.onclose)
|
||||||
this.onclose.call(null);
|
this.onclose.call(null);
|
||||||
});
|
});
|
||||||
// Silently ignore all errors - we don't know what to do with them.
|
// Silently ignore all errors - we don't know what to do with them.
|
||||||
this._ws.on('error', () => {});
|
this._ws.addEventListener('error', () => {});
|
||||||
this.onmessage = null;
|
this.onmessage = null;
|
||||||
this.onclose = null;
|
this.onclose = null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user