[英]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.