为什么 HTML5 Web Worker 必须在 Chrome 浏览器的 HTML 文件中初始化?

Why HTML5 Web Worker have to be initialized within a HTML file in Chrome Browser?

我刚刚为网络工作者制作了一个脚本,想知道这是否是浏览器遭受的另一个错误 chrome。 我不知道是否已经修复了另一个 chromium-bug,因为您无法在 chromium 的 运行 worker 中初始化另一个 worker(嵌套): https://code.google.com/p/chromium/issues/detail?id=31666

这在main.html:

<script language="JavaScript" src="workerScript.js" type="text/javascript"></script>
<script language="JavaScript" src="workerScript2.js" type="text/javascript"></script>

<script>

    // no error is thrown when workerScript.init('workerScript2.js') is called
    console.log(workerScript.init('workerScript2.js')); // Worker { ... }

</script>

workerScript.js:

function callWorker(){
    var worker = new Worker('workerScript.js');
}

callWorker(); // Uncaught ReferenceError: Worker is not defined

workerScript2:

var workerScript = {
  init: function(file){
    var worker = new Worker(file);
    return worker;
  }
};

在chromium(版本40.0.2214.91 m)中执行main.html时 在 workerScript.js:

中抛出错误

Uncaught ReferenceError: Worker is not defined

在 chromiums 中,似乎只要你在一个已执行的 html 文件中初始化一个 worker 就不会抛出任何错误,除了 within 一个外部 js 文件当一个函数被调用或 new Worker(...) 被执行,就像 workerScript.js 中的情况一样。

实际问题: 这是一个 security-issue/precaution 的 chromium,因为如果没有抛出任何错误,workerScript.js 会是 chromium 的一个无限循环吗?(workerScript.js 的一个工人试图再次打开 workerScript.js?)但是为什么这在 Firefox 甚至 IE 等其他浏览器中有效?

根据 Rob W 提供的评论,这与问题顶部描述的错误相同。

希望这个错误能尽快得到修复。因为我必须检查它是否是 chrome 浏览器,如果是,则只有 运行 one main-worker 而不是几个 nested-worker。 Chrome 速度很快,但就与 worker 的计算而言,它可以变得更快。

感谢您的宝贵时间。

截至 2016 年 9 月 8 日,此问题尚未解决。我们最近对该主题发表了一些评论(OP 中的 link),但仍然没有吸引力。有一个更大的问题 android/safari 根本不支持共享工作者。有一个很好的解决方法,涉及在它们之间穿梭工作线程数据,但这会占用主线程......并且在 Firefox (woo) 中不受支持(我最后检查过)。