2011-06-28 13 views
1

Google Chrome拡張機能を作成しています。私は簡単に前後にメッセージを渡すことができる段階に達しましたが、私は応答コールバックの使用に問題があります。私の背景ページはメッセージページを開き、メッセージページはバックグラウンドからより多くの情報を要求します。メッセージページが応答を受け取ると、メッセージページの標準テキストの一部を、応答に基づいたカスタムテキストに置き換えたいと考えています。コードは次のとおりです。レスポンスコールバック後の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); 
}); 

最初の質問:これはすべてうまくいくようですが、ページのテキストは変更されません。ページのロードが完了した後でコールバックが完了し、コールバックが完了する前にコードの残りの部分が終了するので、私はほぼ確実です。新しいテキストでページを更新するにはどうすればよいですか?コールバックが完了するのを聞くことができますか?

第2質問:私が最初に実行しようとしている手順では、メッセージページを開き、メッセージページからバックグラウンドからキーワードリストを要求します。私は常にキーワードリストが必要なので、タブを作成すると、それを送信するほうが意味があります。それをしてもいいですか?ここではメッセージページを開き、背景からのコードは次のとおりです。2番目の質問の線に沿って

//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"); 
    } 
}); 

しかし、これは、どちらかそれを動作しません。スクリプトは実行されません。

+0

上記の2番目の質問の行に沿って、私もこれを試しました: – Jerome

答えて

1

@sergで以前の回答を読んだ後、質問の最初の部分に答えることができます。この問題は、sendRequestの非同期性に起因しています。コールバックが必要です。以下は、動作するコードです:

もう一度、私は@sergに負っています。ありがとう。

関連する問題