1
我正在寫谷歌瀏覽器擴展。我已經達到了可以輕鬆地傳遞消息的階段,但是使用響應回調遇到了麻煩。我的後臺頁面打開一個消息頁面,然後消息頁面從後臺請求更多信息。當消息頁面收到響應時,我想用基於響應的自定義文本替換消息頁面上的一些標準文本。這裏是代碼:谷歌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");
}
});
但這也不管用,它只是休息,沒有腳本執行。
沿着上述第二個問題的思路,我也試過這個: – Jerome