2011-06-19 9 views
1

私はGoogle Chromeの拡張機能を書いています。コンテンツスクリプトは、sendNextProfile要求がバックグラウンドページから送信されたことを決して確認しません。少なくとも、次のプロファイルのためにRECEIVED REQUESTメッセージはコンソールログに表示されず、バックグラウンドでは新しい要求は見られません。 HERE グーグルクロムエクステンションの文脈への背景メッセージ

は期待どおりに表示されるように、コンソールメッセージは、表示される背景側で背景ページ

//detect when message tab is closed and request new profile 
//var closedTabId=null; 
chrome.tabs.onRemoved.addListener(function(tabid, removeInfo) { 
    console.log("TAB CLOSED "+tabid); 
    if (tabid==msgTabId) { 
     chrome.extension.sendRequest({cmd: "sendNextProfile"}); 
     console.log("REQUESTED NEW PROFILE"); 
    } 
}); 

FROM CODEコンテンツスクリプトHERE

//send request for first profile 
var currentProfile=0; 
chrome.extension.sendRequest({cmd: "openProfile", url: profileLinks[currentProfile]}); 

//listen for request to send next profile 
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    if(request.cmd == "sendNextProfile") { 
     console.log("RECEIVED REQUEST FOR NEXT PROFILE"); 
     ++currentProfile; 
     chrome.extension.sendRequest({cmd: "openProfile", url: profileLinks[currentProfile]}); 
    } 
}); 

FROM CODE IS ISリクエストが送信されます。では、このコードはどうなっていますか?

+0

'バックグラウンド側では、コンソールメッセージが期待通りに表示されます。 ' 正確に表示されるメッセージは何ですか? TABが新しいプロフィールを閉鎖したか、または両方をリクエストしましたか? – Achshar

答えて

1

の代わりに:

chrome.tabs.sendRequest(tabId, {cmd: "sendNextProfile"}); 

しかし、あなたのタブが削除された場合、それはまだ存在しないように、そのタブにリクエストを送信しても意味がありません:

chrome.extension.sendRequest({cmd: "sendNextProfile"}); 

それはする必要があります。他のタブに送る必要があるかもしれませんか?

+0

実際には検索ページはまだ開いているはずです。バックグラウンドはそれを開かなかったので、バックグラウンドはまだ検索ページのタブを学習していません。ここでの誤解は、メッセージがタブに向けられ、タブを放送するためのものではないという考え方です。考えてみると、より良いアプローチは、検索結果の配列全体をバックグラウンドに送り、検索ページがリンクを配列に集める以上のことをする必要がないため、バックグラウンドで処理を制御できるようにすることです。 – Jerome

関連する問題