onRequest.addListener и sendRequest являются частью расширенного обмена сообщениями Chrome. Который находится здесь http://developer.chrome.com/extensions/messaging.html
По сути, вы слушаете запрос, используя "onRequest.addListener", который кто-то отправил, вызвав "sendRequest".
В вашем случае вы вставляете « onRequest.addListener » в свой скрипт контента для прослушивания запросов, поступающих из всплывающего окна (используя sendRequest ). А из вашего скрипта контента вы можете вернуть ответ обратно во всплывающее окно, чтобы обработать происходящее. Во всплывающем окне у вас есть прямой доступ к фоновой странице с помощью chrome.extension.getBackgroundPage () .
Если вы хотите, чтобы ваш контент-скрипт также связывался с вашей фоновой страницей (которая не нужна, так как ваши вещи усложняются), вы можете добавить «onRequest.addListener» на вашу фоновую страницу, которая прослушивает только запросы, поступающие от контентный скрипт. Для этого Передача сообщений объясняет это прекрасно. «sender.tab», если true, является скриптом содержимого.
В приведенном ниже примере (без проверки) показано, что я имею в виду при передаче сообщений. Помните, старайтесь делать вещи простыми, а не сложными.
Пример
Popup.html
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, {method: "fromPopup", tabid: tab.id}, function(response) {
console.log(response.data);
});
});
ContentScript.js
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.method == "fromPopup") {
// Send JSON data back to Popup.
sendResponse({data: "from Content Script to Popup"});
// Send JSON data to background page.
chrome.extension.sendRequest({method: "fromContentScript"}, function(response) {
console.log(response.data);
});
} else {
sendResponse({}); // snub them.
}
});
BackgroundPage.html
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
// From content script.
if (sender.tab) {
if (request.method == "fromContentScript")
sendResponse({data: "Response from Background Page"});
else
sendResponse({}); // snub them.
}
});