web-dev-qa-db-ja.com

'DedicatedWorkerGlobalScope'で 'postMessage'の実行に失敗しました:指定された値をシーケンスに変換できません

次のエラーが発生します

Uncaught TypeError:「DedicatedWorkerGlobalScope」で「postMessage」の実行に失敗しました:指定された値をシーケンスに変換できません。

webworkerのこの行:

postMessage("hi", "http://localhost:8000");

(実際、それはWebworker全体です)。

ベースファイルには次のものが含まれます。

var myWorker = new Worker("test.js");
myWorker.onmessage = function (e) {
    console.log('Message received from worker');
};

それがどの値について不平を言っているのか、そしてそれが「シーケンス」に変換されることの意味がわかりません。

6
brentonstrine

投稿されたメッセージの宛先は暗黙的です(関数が呼び出されているワーカーオブジェクト、またはワーカー内から呼び出されたときにワーカーを作成したスクリプトのいずれかです。したがって、次を使用する必要があります。

postMessage("hi");

参照: MDNのpostMessage

関係のない理由でこの問題に遭遇した私のような他の人に役立つ場合に備えて、私は次のことを行っていました。

postMessage("type", value)

私がやろうと思ったとき:

postMessage(["type", value])
5
solsword

postMessageで複数のパラメーターを渡そうとすると、同じエラーメッセージが表示されました。

1つの解決策は、JSONオブジェクトを使用して渡すことです。

例:postMessage({'key1': 'value1','key2': 'value2'});

次に、アクセスするときに、次の操作を実行できます。

onmessage = function(event){

    var v1 = event.data.key1 ;
    var v2 = event.data.key2;
}
1
Akshay Chopra