現在、Chrome 拡張機能をいじっていますが、バックグラウンド コンテキスト ( BGと呼びましょう) から挿入されたスクリプトのコンテキスト ( INJと呼びましょう)にメッセージを送信するための便利なソリューションが見つかりません。INJからBGへのメッセージの送信は魅力的です。しかし、時間がかかるかもしれない をBGにやってもらいたいので、この依頼の評価をINJに送りたいと思います。XMLHttpRequest
残念ながら、 INJのコンテキストでリスナーを登録することはできません。したがって、私が考えることができる最良の解決策は次のとおりです。
- INJからBGにメッセージを送信し、
XMLHttpRequest
- リクエストが返されるとすぐにBGはリクエストの結果をローカルに保存します
- BGが結果で応答しない限り、 INJは結果を求めるメッセージを繰り返しBGに送信します。
多分このようなもの:
注射:
function whaitForResult ()
{
chrome.runtime.sendMessage ({method: "getResult"}, function (response)
{
if (response.finished === "true")
// request finished, lets go on
else
setTimeout(whaitForResult, 100);
}
}
chrome.runtime.sendMessage({method : "triggerRequest"}, function(response) {});
whaitForResult ();
BG :
chrome.runtime.onMessage.addListener (function(request, sender, sendResponse)
{
if (request.method == "triggerRequest")
{
// startXMLHttpRequest ();
sendResponse ({});
return true;
}
else if (request.method == "getResult")
{
if (finishedXMLHttpRequest ())
sendResponse ({finished:"true", result: resultFromXMLHttpRequest ()});
else
sendResponse ({finished:"false"});
return true;
}
});
これでうまくいくはずですが、私の意見では、かなり面倒です。私の質問:挿入されたスクリプトにメッセージを送信する便利な方法はありますか?
私の拡張機能の概念がくだらない場合は、代替案を提案してください。しかし、これを行うには、XMLHttpRequest
からいくつかの変数が必要です。このデータは非常に機密であるため、これらの変数をINJlocalStorage
のコンテキストに渡したくありません。したがって、INJ で行うことはオプションではありません。XMLHttpRequest