4

こんにちは、メッセージイベントを背景ページに送信するコンテンツスクリプトを備えたクロム拡張機能があります。メッセージイベントのポップアップ背景ページを変更したいと思います。背景ページは最初は空白です

私が試してみました:

chrome.extension.onMessage.addListener(function (request, sender, sendResponse) {
   console.log('message received');
   chrome.extension.getBackgroundPage().document.innerHTML = 'hello world';
}

しかし、拡張機能のアイコンをクリックしても空白のままです。助けてください。コンソールで、そのメッセージが受信されたことがわかります。

4

1 に答える 1

8

ポップアップは拡張ページですが、背景ページではありません。開いているときのみアクセスできます。したがって、他の情報に基づいてポップアップ ページを変更する最善の方法は、ポップアップ自体からメッセージを開始することです。コンテンツ スクリプトを使用してページに関する何らかの情報を取得し、その情報に基づいてポップアップを変更していると思います。データを準備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.

于 2013-03-15T16:14:09.640 に答える