web-dev-qa-db-ja.com

google chrome拡張機能::背景ページからconsole.log()?

ポップアップページからconsole.log('something');を呼び出した場合、または含まれているスクリプトが正常に機能する場合。

ただし、背景ページはポップアップページから直接実行されないため、コンソールには含まれません。

バックグラウンドページでconsole.log()を取得して、ポップアップページのコンソールに表示する方法はありますか?

バックグラウンドページからポップアップページの関数を呼び出す方法はありますか?

153
Hailwood

すべての拡張ページコンテンツスクリプト を除く)は、 chrome.extension.getBackgroundPage()経由でバックグラウンドページに直接アクセスできます。

つまり、 ポップアップページ 内で、次のことができます。

chrome.extension.getBackgroundPage().console.log('foo');

使いやすくするには:

var bkg = chrome.extension.getBackgroundPage();
bkg.console.log('foo');

コンテンツスクリプト 内で同じことをしたい場合は、 Message Passing を使用してそれを達成する必要があります。理由は、これらは両方とも異なるドメインに属していることです。 Message Passing ページには、チェックアウトするための多くの例があります。

それがすべてをクリアすることを願っています。

136
Mohamed Mansour

拡張機能リストの「background.html」リンクをクリックすると、背景ページのコンソールを開くことができます。

拡張機能に対応する背景ページにアクセスするには、Settings / Extensionsを開くか、新しいタブを開いてchrome://extensionsと入力します。このスクリーンショットのようなものが表示されます。

Chrome extensions dialogue

拡張機能の下のリンクbackground pageをクリックします。これにより、新しいウィンドウが開きます。 コンテキストメニューサンプルの場合、ウィンドウのタイトルは_generated_background_page.htmlです。

181
serg

質問に直接答えるために、バックグラウンドからconsole.log("something")を呼び出すと、このメッセージはバックグラウンドページのコンソールに記録されます。表示するには、chrome://extensions/にアクセスして、拡張機能の下にあるinspect viewをクリックします。

ポップアップをクリックすると、ポップアップが現在のページにロードされるため、console.logは現在のページにログメッセージを表示します。

58
songyy

Console.log()を引き続き使用できますが、別のコンソールにログインします。表示するには、拡張機能アイコンを右クリックして、[ポップアップの検査]を選択します。

23
Lacho Tomov

最も簡単な解決策は、ファイルの先頭に次のコードを追加することです。そして、通常のようにすべての Chromeコンソールapi を使用することができます。

 console = chrome.extension.getBackgroundPage().console;
// for instance, console.assert(1!=1) will return assertion error
// console.log("msg") ==> prints msg
// etc
12
dd .

アクティブなページのコンソールにログを記録したい場合、これを試してください:

chrome.tabs.executeScript({
    code: 'console.log("addd")'
});
6
Faz
const log = chrome.extension.getBackgroundPage().console.log;
log('something')

ログを開く:

  • 開く:chrome:// extensions /
  • 詳細>背景ページ
3
O Fallante

元の質問に関連して、私はモハメド・マンスールによって受け入れられた答えに、この作品を他の方法にする方法もあると付け加えたいと思います。

chrome.extension.getViews()呼び出しでバックグラウンドページ/スクリプト内から他の拡張ページ(つまり、オプションページ、ポップアップページ)にアクセスできます。説明したとおり here

 // overwrite the console object with the right one.
var optionsPage = (  chrome.extension.getViews()  
                 &&  (chrome.extension.getViews().length > 1)  ) 
                ? chrome.extension.getViews()[1] : null;

 // safety precaution.
if (optionsPage) {
  var console = optionsPage.console;
}
1
WoodrowShigeru

これは古い投稿であり、すでに適切な回答がありますが、2つのビットを追加します。 console.logを使用したくないので、コンソールにログを記録するロガーを使用するか、どこでも好きなので、このようなログ関数を定義するモジュールがあります

function log(...args) {
  console.log(...args);
  chrome.extension.getBackgroundPage().console.log(...args);
}

Log( "this is my log")を呼び出すと、ポップアップコンソールとバックグラウンドコンソールの両方にメッセージが書き込まれます。

利点は、コードを変更せずにログの動作を変更できることです(本番環境でログを無効にするなど)。

1
Denis G.