我目前正在使用Chrome擴展程序,無法找到方便的解決方案來發送背景上下文(讓我們稱之爲BG)的上下文一個注入的腳本(可以叫它INJ)。發送郵件從INJ到BG工作就像一個魅力。但我想BG做一個XMLHttpRequest
這可能需要一些時間,所以我想發送此請求的評估INJ。Chrome擴展程序:從後臺發送消息到注入的腳本
不幸的是,我不允許在INJ的背景下注冊聽衆。所以,我能想到的最好的解決方案包括:
- 從發送消息INJ到BG,一旦觸發
XMLHttpRequest
- 作爲請求返回BG存儲請求的結果當地
- INJ重複發送進一步消息BG要求的結果,除非BG答案w ^結果。
也許是這樣的:
INJ:
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;
}
});
我想這應該工作,但在我看來這是相當我SSY。所以我的問題:有沒有一種方便的方式發送消息到注入腳本?
如果我的擴展的概念是垃圾,請提出替代方案。但要做XMLHttpRequest
我需要一些來自localStorage
的變量,並且由於此數據非常敏感,所以我不想將這些變量傳遞給INJ的上下文。因此,做XMLHttpRequest
in INJ不是一個選項。
謝謝,它的工作原理!並且也非常感謝您的補充:) – binfalse