Я пишу расширение Google Chrome. Я достиг стадии, когда я могу легко передавать сообщения туда и обратно, но у меня возникают проблемы с использованием ответного обратного вызова. Моя фоновая страница открывает страницу сообщений, а затем страница сообщений запрашивает дополнительную информацию из фона. Когда страница сообщения получает ответ, я хочу заменить некоторый стандартный текст на странице сообщения пользовательским текстом, основанным на ответе. Вот код:
chrome.extension.sendRequest({cmd: "sendKeyWords"}, function(response) {
keyWordList=response.keyWordsFound;
var keyWords="";
for (var i = 0; i<keyWordList.length; ++i)
{
keyWords=keyWords+" "+keyWordList[i];
}
document.getElementsByClassName("comment")[1].firstChild.innerHTML=keyWords;
alert (document.getElementsByClassName("comment")[1].firstChild.innerHTML);
});
ПЕРВЫЙ ВОПРОС: Кажется, что все работает нормально, но текст на странице не меняется. Я почти наверняка потому, что обратный вызов завершается после завершения загрузки страницы, а остальная часть кода завершается до завершения обратного вызова. Как мне обновить страницу новым текстом? Можно ли прослушать обратный звонок для завершения или что-то в этом роде?
ВТОРОЙ ВОПРОС: Процедура, которую я выполняю, сначала открывает страницу сообщения, а затем страница сообщения запрашивает список ключевых слов из фона. Поскольку я всегда хочу список ключевых слов, имеет смысл отправлять его при создании вкладки. Могу ли я сделать это? Вот код из фона, который открывает страницу сообщения:
//when request from detail page to open message page
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if(request.cmd == "openMessage") {
console.log("Received Request to Open Message, Profile Score: "+request.keyWordsFound.length);
keyWordList=request.keyWordsFound;
chrome.tabs.create({url: request.url}, function(tab){
msgTabId=tab.id; //needed to determine if message tab has later been closed
chrome.tabs.executeScript(tab.id, {file: "message.js"});
});
console.log("Opening Message");
}
});
В соответствии со вторым вопросом я также попробовал это в фоновом режиме:
//when request from detail page to open message page
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if(request.cmd == "openMessage") {
console.log("Received Request to Open Message, Profile Score: "+request.keyWordsFound.length);
keyWordList=request.keyWordsFound;
var keyWords="";
for (var i = 0; i<keyWordList.length; ++i)
{
keyWords=keyWords+" "+keyWordList[i];
}
console.log(keyWords);
chrome.tabs.create({url: request.url}, function(tab){
msgTabId=tab.id; //needed to determine if message tab has later been closed
chrome.tabs.executeScript(tab.id, {code: "document.getElementsByClassName('comment')[1].firstChild.innerHTML=keyWords;", file: "message.js"});
});
console.log("Opening Message");
}
});
Но это тоже не работает, просто ломается и ни один скрипт не выполняется.