Разработка расширения для Chrome :Проблема с передачей сообщений
-
28-09-2019 - |
Вопрос
Возникла проблема при передаче сообщений с использованием скриптов содержимого в Google Chrome extension dev Структура моего кода выглядит следующим образом:
popup.html:
var oList;
function getHTML()
{
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, {action:"getHTML"}, function handler(response) {
oList = response.dom;
});
});
alert("oList = "+oList );
}
и мой контент-скрипт выглядит примерно так:
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
if(request.action == "getHTML"){
sendResponse({dom: document.getElementsByTagName("HTML").length});
}
});
Когда я отлаживаю свой код, ставя точку останова в "oList = response.dom;
" в моем popup.html я получаю
правильное значение, установленное в скрипте содержимого.Но при выполнении расширения "alert("oList = "+oList );
" код
из popup.html, похоже, выполняется первым перед отправкой на сервер..И, следовательно, его значение
не устанавливается..Кто - нибудь может сказать мне , не ошибаюсь ли я где - нибудь ?
Решение
Большинство методов Chrome API являются асинхронными.Это означает, что когда вы вызываете их, скрипт не ждет их ответа и просто продолжает выполнение.Если вы хотите выполнить что-то в ответ, вы должны поместить это внутри функции обратного вызова:
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, {action:"getHTML"}, function handler(response) {
oList = response.dom;
alert("oList = "+oList );
});
});