ポップアップは拡張ページですが、背景ページではありません。開いているときのみアクセスできます。したがって、他の情報に基づいてポップアップ ページを変更する最善の方法は、ポップアップ自体からメッセージを開始することです。コンテンツ スクリプトを使用してページに関する何らかの情報を取得し、その情報に基づいてポップアップを変更していると思います。データを準備onMessage
してコンテンツ スクリプト自体にリスナーを含めるか、情報をバックグラウンド ページに渡してポップアップから要求することができます。最初の例は次のとおりです。
コンテンツ スクリプト
...
//assume that you already have the info you want stored in 'info'
chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
sendResponse(info);
});
現れる
chrome.tabs.query({'active': true,'currentWindow':true},function(tab){
chrome.tabs.sendMessage(tab[0].id,"stuff", function(response){
//assuming that info was html markup then you could do
document.body.innerhtml = response;
//I personally wouldn't do it like this but you get the idea
});
});
ここで要求されているように、バックグラウンド ページを仲介として使用しています。
コンテンツ スクリプト
// same assumption that info is already defined as the info you want
chrome.runtime.sendMessage({'method':'setInfo','info':info});
背景ページ
var info;
chrome.runtime.onMessage(function(message,sender,sendResponse){
// When we get a message from the content script
if(message.method == 'setInfo')
info = message.info;
// When we get a message from the popup
else if(message.method == 'getInfo')
sendResponse(info);
});
現れる
chrome.runtime.sendMessage({'method':'getInfo'},function(response){
//response is now the info collected by the content script.
console.log(response);
});
もちろん、単純なグローバル var よりも優れた方法でバックグラウンド ページに情報を保存できます。1 つの良い方法は、storage API
.