[英]Relative path in Script src and Link rel keeps resolving to root URL
[英]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) 构造函数时,用户代理必须运行以下步骤:
- 在调用该方法时,解析相对于入口脚本的基本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.