首页 > 解决方案 > 错误:检测到不支持的 WebSocket 版本:HyBi-00/Hixie-76

问题描述

我试图将我的 Angular 7 Web 应用程序与 QZ Tray 集成以在没有预览对话框的情况下进行打印。但是得到了不受支持的 WebSocket 版本。请帮我解决?谢谢

- Dependencies
"dependencies": {
    "@agm/core": "^1.0.0-beta.6",
    "@angular/animations": "^7.2.11",
    "@angular/cdk": "^7.3.6",
    "@angular/common": "^7.2.11",
    "@angular/compiler": "^7.2.11",
    "@angular/core": "^7.2.11",
    "@angular/forms": "^7.2.11",
    "@angular/http": "^7.2.11",
    "@angular/material": "^7.2.11",
    "@angular/platform-browser": "^7.2.11",
    "@angular/platform-browser-dynamic": "^7.2.11",
    "@angular/router": "^7.2.11",
    "@angular/upgrade": "^7.2.11",
    "js-sha256": "^0.9.0",
    "qz-tray": "^2.0.10",
    "roboto-fontface": "0.8.0",
    "rxjs": "6.4.0",
    "rxjs-compat": "6.3.0",
    "sha": "^3.0.0",
    "ws": "7.0.0",
    "zone.js": "^0.8.29"
},

现在这就是我所做的

import * as qz from 'qz-tray';
import { sha256 } from 'js-sha256';

qz.api.setSha256Type(data => sha256(data));
qz.api.setPromiseType(function promise(resolver) { return new Promise(resolver); });
qz.api.setWebSocketType(require('ws'));
var createHash = require('sha.js');
qz.api.setSha256Type(function(data) {return createHash('sha256').update(data).digest('hex');});

qz.websocket.connect().then(qz.printers.getDefault).then(printer => console.log("Default printer: " + printer))
.then(qz.websocket.disconnect)
.catch(err => console.error(err));

输出日志:

utils.ts:414 Error: Unsupported WebSocket version detected: HyBi-00/Hixie-76 at qz-tray.js:667 at new ZoneAwarePromise (zone.js:910) at Object.promise (utils.ts:21) at Object.connect (qz-tray.js:654) at Utils.push../src/app/@core/one.utils/utils/common/utils.ts.Utils.initPrinterService (utils.ts:405)

标签: angular7qz-tray

解决方案


ws项目替换为w3cwebsocket.

// Node example, adjust to your implementation as-needed
var qz = require("qz-tray");

// Use default Promise provided by JS
qz.api.setPromiseType(function promise(resolver) { return new Promise(resolver); });

// Simulate the browser's version of the websocket
qz.api.setWebSocketType(require('websocket').w3cwebsocket);

// There's a bunch of sha256 libs out there, choose one
var createHash = require('sha.js');
qz.api.setSha256Type(function(data) {
    return createHash('sha256').update(data).digest('hex');
});

qz.websocket.connect().then(function() {
    return qz.printers.find();
}).then(function(printers) {
    console.log(printers);
}).then(function() {
    return qz.websocket.disconnect();
}).then(function() {
    process.exit(0);
}).catch(function(err) {
    console.error(err);
    process.exit(1);
});

推荐阅读