创建Web Worker时在Safari中出现JavaScript“ ReferenceError:找不到变量:Worker”

问题描述

我在JavaScript代码中使用了Web Worker,使用Worker的类如下所示:

class EnemyMoveCalculater {
    constructor() {
        this.worker = null;
    }

    startMoveCalculation(boardData,nextPlayer,jokerReady,enemyMoveHandlerCallback) {
        this.worker = new Worker('js/calculateEnemyMoves.js');
        this.worker.onmessage = function(e) {
            this.worker.terminate();
            this.worker = null;
            enemyMoveHandlerCallback(e.data);
        }.bind(this);
        this.worker.postMessage([boardData,jokerReady]);
    }

    terminateMoveCalculation() {
        if (this.worker) this.worker.terminate();
    }
}

我的网站在Firefox(适用于Windows和Android),Edge和Samsung Internet browser中运行。但是,当“ startMoveCalculation”在Safari(版本12.1.2)中运行时,出现以下错误

ReferenceError: Can't find variable: Worker

可能是什么问题?

解决方法

不幸的是,到目前为止,

Safari不支持从其他Web Worker内部生成Web Worker。在这种情况下,Worker可能必须请求主线程生成另一个worker并管理worker之间的通信。

Chrome似乎已将Safari / WebKit降为“无信号”发布此功能:

https://www.chromestatus.com/feature/6080438103703552

要遵循的WebKit错误:

https://bugs.webkit.org/show_bug.cgi?id=25212