我在http://localhost/js/foo.js
有一个脚本需要从文件http://localhost/js/fooWorker.js
中生成一个Web Worker。我以为我可以做这样的事情:
var worker = new Worker('fooWorker.js')
但是,这会导致404错误,因为浏览器找不到http://localhost/fooWorker.js
。我的印象是工作路径相对于产生工作者的脚本被解析了,所以我不应该只能在同一目录中指定另一个.js文件的名称而不必提供绝对路径?我做错了吗?
答案 0 :(得分:8)
来自http://www.w3.org/TR/workers/:
调用Worker(scriptURL)构造函数时,用户代理必须 执行以下步骤:
- 解析相对于条目脚本的基础的scriptURL参数 调用方法时的URL。
醇>
答案 1 :(得分:3)
实际上,它应该是相对于嵌入式文档路径
例如,
我有
pathDoc\docA.html
js\b.js
js\worker\c.js
然后代码应该是
var worker = new Worker('..\js\worker\c.js')
答案 2 :(得分:1)
请注意,您仍然可以使用self.location
在工作服务器中获取脚本URL,并将其添加到使它们相对于工作脚本而不是html基本URL相对的路径。
const workerUrl = location + '';
const basePath = workerUrl.replace(/\/[^/]+$/, '/');
self.importScripts(basePath + '/fooWorker.js');
顺便说一句,如果您通过blob包括您的工作人员,您仍可以通过#
哈希参数传递元数据信息,例如其url。