Javascript 连接到websocket使webworker在Microsoft edge中不响应

Javascript 连接到websocket使webworker在Microsoft edge中不响应,javascript,websocket,web-worker,Javascript,Websocket,Web Worker,所以这很奇怪,当我尝试连接到websocket时(这只是一个Microsoft边缘问题),它每秒钟刷新一次页面webworker都不会接受消息onMessage根本不会触发: 考虑以下几点: main.js var worker = new Worker("webworker.js"); worker.postMessage({ type: 'INIT_SOCKET' }); worker.addEventListener('message', (event) =&g

所以这很奇怪,当我尝试连接到websocket时(这只是一个Microsoft边缘问题),它每秒钟刷新一次页面
webworker
都不会接受消息
onMessage
根本不会触发:

考虑以下几点:

main.js

    var worker = new Worker("webworker.js");
    worker.postMessage({ type: 'INIT_SOCKET' });

    worker.addEventListener('message',  (event) => {
        let data = event.data;

        if (typeof data === 'string') {
            data = JSON.parse(data);
        }

        if (data.type === 'SOCKET_INITIALIZED') {
            console.log('inititalized');
        }
    });
    var io = require('socket.io-client');

    var socket;
    onmessage = function(event) {
        var data = event.data;

        console.log('got a event');

        if (typeof data === 'string') {
            data = JSON.parse(data);
        }

        switch (data.type) {
            case 'INIT_SOCKET':
                try {
                    socket = io('xxxx', { transports: [ 'websocket' ], secure: true }); // this line causes the error
                    socket.on('connect', function () {
                        postMessage({
                            type: Consts.SOCKET_INITIALIZED
                        });
                    });
                } catch(e) {
                    console.log('some error ', e);
                }

            break;

        };
    };
webworker.js

    var worker = new Worker("webworker.js");
    worker.postMessage({ type: 'INIT_SOCKET' });

    worker.addEventListener('message',  (event) => {
        let data = event.data;

        if (typeof data === 'string') {
            data = JSON.parse(data);
        }

        if (data.type === 'SOCKET_INITIALIZED') {
            console.log('inititalized');
        }
    });
    var io = require('socket.io-client');

    var socket;
    onmessage = function(event) {
        var data = event.data;

        console.log('got a event');

        if (typeof data === 'string') {
            data = JSON.parse(data);
        }

        switch (data.type) {
            case 'INIT_SOCKET':
                try {
                    socket = io('xxxx', { transports: [ 'websocket' ], secure: true }); // this line causes the error
                    socket.on('connect', function () {
                        postMessage({
                            type: Consts.SOCKET_INITIALIZED
                        });
                    });
                } catch(e) {
                    console.log('some error ', e);
                }

            break;

        };
    };

require
似乎未在
Worker
上下文中定义。用于将外部脚本导入专用WorkerGlobalScope。比如说

importScripts("socket.io.js"); 
无法确定如何停止轮询和获取错误的
io()
调用,可能是由于
404
错误

可能是因为不熟悉
io()
是如何实现的。虽然能够在
Worker
范围内定义
Socket
对象

使用
WebSocket
的方法返回预期结果

const worker = new Worker("webworker.js");

worker.addEventListener('message', (event) => {
  let data = event.data;

  if (typeof data === 'string') {
    console.log(data)
  }

  if (data.type === 'SOCKET_INITIALIZED') {
    console.log('inititalized');
  }
});

worker.postMessage({
  type: 'INIT_SOCKET'
});


plnkr

连接
事件处理程序中
是什么?我不确定您在哪里看到
,但是如果您通常询问连接处理程序中的上下文是什么,它是处理程序还是窗口。我不确定这有什么关系。是否使用正确的上下文调用了
postMessage
?检查
数据的目的是什么?字符串是否作为消息传递到
javascript
的一部分?您是否尝试调用
worker.postMessage({type:'INIT_SOCKET'})在附加
消息之后
事件处理程序?是否定义了
Consts.SOCKET\u INITIALIZED
?我提到的错误非常奇怪,因为它不一致,它只出现在每秒刷新一次的页面上,只出现在边缘上,并且只出现在包含连接到SOCKET的行时。不过,我会更仔细地尝试你的答案。另外,如果问题是require,则每次刷新页面时都会发生此错误。@netmeta注意,您没有尝试edge。无法重现具体问题。尽管
WebSocket
似乎返回了铬的预期结果。该方法可能会进一步调整和改进以满足要求。若并没有在edge上进行测试,那个么你们的测试参数是错误的,你们的解决方案是无效的。由于这种情况也只发生在edge上,所以socket.io不是可选的。@NetMeta已经有一段时间没有使用ie、*indows了。回答时的
javascript
是否未返回预期结果?应该删除帖子吗?