繁体   English   中英

Javascript没有解析相对于当前脚本的工作路径

[英]Javascript not resolving worker path relative to current script

我在http://localhost/js/foo.js有一个脚本,它需要从文件http://localhost/js/fooWorker.js生成一个 Web Worker。 我以为我可以做这样的事情:

var worker = new Worker('fooWorker.js')

但是,这会导致 404 错误,因为浏览器找不到http://localhost/fooWorker.js 我的印象是工作路径是相对于产生工作的脚本解析的,所以我不应该只能够在同一目录中指定另一个 .js 文件的名称而不必提供绝对路径吗? 难道我做错了什么?

来自http://www.w3.org/TR/workers/

当调用 Worker(scriptURL) 构造函数时,用户代理必须运行以下步骤:

  1. 在调用该方法时,解析相对于入口脚本的基本URL 的 scriptURL 参数。

实际上,它应该是相对于嵌入的文档路径

例如,

我有

pathDoc\docA.html
js\b.js
js\worker\c.js

那么代码应该是

var worker = new Worker('..\js\worker\c.js')

请注意,您仍然可以使用self.location获取 worker 中的脚本 url,并将其添加到路径中,使它们与 worker 脚本相关,而不是 html base url。

const workerUrl = location + '';
const basePath = workerUrl.replace(/\/[^/]+$/, '/');

self.importScripts(basePath + '/fooWorker.js');

顺便说一句,如果你通过 blob 包含你的工作人员,你仍然可以通过# hash params 传递元信息,就像它的 url。

使用import.meta.url ,您应该能够让它像相对路径一样工作。

var worker = new Worker(new URL('./fooWorker.js', import.meta.url));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM