グーグルクロム拡張::背景ページからのconsole.log()?


173

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

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

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

背景ページからポップアップページの関数を呼び出す方法はありますか?


「うまくいく」とはどういう意味ですか?「何か」をどこで読んでいますか?ポップアップウィンドウでconsole.log()を使用しても、読み込まれたページのコンソールに印刷されません-質問が2年前なので、APIは変更されましたか?
anddam

14
右クリック->ブラウザアクションのポップアップを検査すると、拡張機能の開発者ツールページが表示されます。popup.jsはそのログを出力します。
not_shitashi 2013

@not_shitashiのコメントがこの質問の答えになるはずです。
gabe

回答:


154

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

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

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

使いやすくするには:

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

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

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


1
@MohamedMansour、このソリューションは私にはうまくいきません。私ならばalert() chrome.extension.getBackgroundPage()、私が得ますnull。権限を設定したり、その他の設定をしたりする必要がありますか?
gwg 2014年

@gwg拡張機能に背景ページはありますか?ドキュメントによると、「拡張機能にバックグラウンドページがない場合はnullを返します。」developer.chrome.com/extensions/...
モハメド・マンスール

これは、自分のコンソールへのメッセージに対して完全に機能します。ありがとう。どのようにpopup.jsから例外などを作成するかについての考えは、background.jsのコンソールに表示されますか?
steven_noble 2015

195

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

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

Chrome拡張ダイアログ

拡張機能の下のリンクをクリックしますbackground page。新しいウィンドウが開きます。以下のために、コンテキストメニューのサンプルウィンドウは、タイトルを持っています_generated_background_page.html


4
乾杯、私はこれを知っていますが、背景ページを直接開いてもポップアップページから何も呼び出されません。
Hailwood、

バックグラウンドページを開いても、コンソールのログ情報は出力されません。
Layke

@Hailwoodが背景ページを開いても何も呼び出されませんが、背景ページのコンソールが表示されます。
anddam

1
@Laykeバックグラウンドページを開いた後も、それに書き込む必要があります。つまり、バックグラウンドページから直接console.log()を使用するか、mohamed-mansourが言ったように、getBackgroundPage()によって返されたオブジェクトに対して同じメソッドを呼び出します
anddam

3
拡張機能の出力(OPなど)を確認する方法を検索しているこの質問を見つけました。コンテンツページを経由せずにコンソールのログを確認できるため、この回答は非常に役立ちました。
anddam

66

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

ポップアップをクリックすると、現在のページに読み込まれるので、console.logは現在のページにログメッセージを表示します。


私も!それは最も単純で直接的です。
SaidbakR 2014年

私の拡張機能にはそれがありませんが、他の拡張機能にはあります!有効にするには
Ahmed Eid 2017年

私のように3台のモニターを持っているなら...頭を振り回してください。モニターアレイの反対側の端でChromeDevToolsを開いていたため、表示されませんでした。
mpen

26

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


12

最も簡単な解決策は、ファイルの先頭に次のコードを追加することです。また、通常どおりすべての完全なChromeコンソールAPIを使用できます。

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

9
const log = chrome.extension.getBackgroundPage().console.log;
log('something')

ログを開く:

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

コマンドにいくつかの説明を提供してもらえますか?
inetphantom

7

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

chrome.tabs.executeScript({
    code: 'console.log("addd")'
});

1
現在のタブのホスト権限が必要です。
2014

テスト用に追加したり、アドオンをリリースしたら削除したりできます。
2014

1

元の質問に関連して、モハメド・マンスールが受け入れた回答に加えて、これを逆にする方法もあると思います:

呼び出しを使用して、バックグラウンドページ/スクリプト内から他の拡張ページ(オプションページ、ポップアップページなど)にアクセスできますchrome.extension.getViews()。ここで説明されています

 // 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

これは古い投稿ですが、すでに良い答えがありますが、2ビット追加します。私はconsole.logを使用したくありません。コンソールにログを記録するロガーを使用したいのですが、好きな場所で使用できるように、このようなログ関数を定義するモジュールを用意しています。

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

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

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


0

バックグラウンドページからコンソールログを取得するには、バックグラウンドページbackground.jsに次のコードスニペットを記述する必要があります-

chrome.extension.getBackgroundPage()。console.log( 'hello');

次に、拡張機能を読み込み、そのバックグラウンドページを調べてコンソールログを確認します。

どうぞ!!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.