创建 Web Worker 时,Safari 中的 JavaScript“ReferenceError:找不到变量:Worker”

sw0*_*816 2 javascript safari referenceerror

我在 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, nextPlayer, jokerReady]);
    }

    terminateMoveCalculation() {
        if (this.worker) this.worker.terminate();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的网站可在 Firefox(适用于 Windows 和 Android)、Edge 和 Samsung 互联网浏览器中运行。但是,当“startMoveCalculation”在 Safari(版本 12.1.2)中运行时,我收到以下错误:

ReferenceError: Can't find variable: Worker
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?

Tec*_*aco 5

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

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

https://www.chromestatus.com/feature/60804381​​03703552

WebKit 错误如下:

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

  • 截至本文发表评论时,Safari 技术预览版已对此问题进行了修复。 (2认同)