簡體   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