Javascript无法解析相对于当前脚本的工作路径

时间:2012-09-14 02:03:36

标签: javascript web-worker

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

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

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

3 个答案:

答案 0 :(得分:8)

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

  

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

     
      
  1. 解析相对于条目脚本的基础的scriptURL参数   调用方法时的URL。
  2.   

答案 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。