Worker 构造函数是否接受相对 URL?

Does the Worker constructor accept relative urls?

我想知道 Worker 构造函数是否接受相对路径。例如,文件结构如下:

root/
+---js/
|   +--workers/
|   |  +--some-worker.js
|   +--index.js
+---index.html

如果 index.html 加载 index.js 并且 index.js 执行如下操作:

var someWorker = new Worker("./workers/some-worker.js");

这样可以吗?好吧,不。奇怪的是它将 url 解析为 <domain>/workers/some-worker.js.

这个问题有解决办法吗?我希望改为加载 <domain>/js/workers/some-worker.js

如何使 new Worker("workers/some-worker.js") 解析到相对目录(在本例中 /js/workers/some-worker.js,因为它是从 /js/ 调用的)?

您不能为此使用相对 URL。另一件事是,它接受相对于域的 URLs。所以,它是:

  • 绝对URLs
  • 相对于 URL 域

就是这些。您可以参考MDN Worker()了解更多信息。

你也有一个解决方法,通过获取当前位置来设置 URL。所以你改为这样做:

var someWorker = new Worker(location.href + "/workers/some-worker.js");

或者准确地说,你可以这样做:

currentPath = location.href.split("#");
if (currentPath.length > 1)
  currentPath = currentPath[0];
currentPath = location.href.split("?");
if (currentPath.length > 1)
  currentPath = currentPath[0];
var someWorker = new Worker(currentPath + "/workers/some-worker.js");

希望对您有所帮助! :)