22

http://localhost/js/foo.jsfile から Web Worker を生成する必要があるスクリプトがありますhttp://localhost/js/fooWorker.js。次のようなことができると思いました:

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

ただし、ブラウザが を見つけられないため、これにより 404 エラーが発生しますhttp://localhost/fooWorker.js。ワーカー パスは、ワーカーを生成するスクリプトに関連して解決されるという印象を受けました。したがって、絶対パスを指定しなくても、同じディレクトリ内の別の .js ファイルの名前を指定できるのではないでしょうか? 私は何か間違ったことをしていますか?

4

4 に答える 4

8

http://www.w3.org/TR/workers/から:

Worker(scriptURL) コンストラクターが呼び出されると、ユーザー エージェントは次の手順を実行する必要があります。

  1. メソッドが呼び出されたときに、エントリ スクリプトのベースURLを基準にして scriptURL 引数を解決します。
于 2012-09-14T02:12:18.267 に答える
3

実際には、埋め込まれたドキュメントのパスに相対的である必要があります

例えば、

私は持っている

pathDoc\docA.html
js\b.js
js\worker\c.js

次に、コードは

var worker = new Worker('..\js\worker\c.js')
于 2015-07-03T20:52:45.910 に答える
1

を使用してワーカー内でスクリプト URL を取得し、self.locationそれをパスの先頭に追加して、html ベース URL ではなくワーカー スクリプトからの相対パスにすることができることに注意してください。

const workerUrl = location + '';
const basePath = workerUrl.replace(/\/[^/]+$/, '/');

self.importScripts(basePath + '/fooWorker.js');

ところで、ブロブを介してワーカーを含める場合でも、#ハッシュ パラメータを介して URL のようなメタ情報を渡すことができます。

于 2020-06-23T21:05:01.343 に答える