ポップアップページからconsole.log('something');
を呼び出した場合、または含まれているスクリプトが正常に機能する場合。
ただし、背景ページはポップアップページから直接実行されないため、コンソールには含まれません。
バックグラウンドページでconsole.log()
を取得して、ポップアップページのコンソールに表示する方法はありますか?
バックグラウンドページからポップアップページの関数を呼び出す方法はありますか?
すべての拡張ページ( コンテンツスクリプト を除く)は、 chrome.extension.getBackgroundPage()
経由でバックグラウンドページに直接アクセスできます。 。
つまり、 ポップアップページ 内で、次のことができます。
chrome.extension.getBackgroundPage().console.log('foo');
使いやすくするには:
var bkg = chrome.extension.getBackgroundPage();
bkg.console.log('foo');
コンテンツスクリプト 内で同じことをしたい場合は、 Message Passing を使用してそれを達成する必要があります。理由は、これらは両方とも異なるドメインに属していることです。 Message Passing ページには、チェックアウトするための多くの例があります。
それがすべてをクリアすることを願っています。
拡張機能リストの「background.html」リンクをクリックすると、背景ページのコンソールを開くことができます。
拡張機能に対応する背景ページにアクセスするには、Settings / Extensions
を開くか、新しいタブを開いてchrome://extensions
と入力します。このスクリーンショットのようなものが表示されます。
拡張機能の下のリンクbackground page
をクリックします。これにより、新しいウィンドウが開きます。 コンテキストメニューサンプルの場合、ウィンドウのタイトルは_generated_background_page.html
です。
質問に直接答えるために、バックグラウンドからconsole.log("something")
を呼び出すと、このメッセージはバックグラウンドページのコンソールに記録されます。表示するには、chrome://extensions/
にアクセスして、拡張機能の下にあるinspect view
をクリックします。
ポップアップをクリックすると、ポップアップが現在のページにロードされるため、console.logは現在のページにログメッセージを表示します。
Console.log()を引き続き使用できますが、別のコンソールにログインします。表示するには、拡張機能アイコンを右クリックして、[ポップアップの検査]を選択します。
最も簡単な解決策は、ファイルの先頭に次のコードを追加することです。そして、通常のようにすべての Chromeコンソールapi を使用することができます。
console = chrome.extension.getBackgroundPage().console;
// for instance, console.assert(1!=1) will return assertion error
// console.log("msg") ==> prints msg
// etc
アクティブなページのコンソールにログを記録したい場合、これを試してください:
chrome.tabs.executeScript({
code: 'console.log("addd")'
});
const log = chrome.extension.getBackgroundPage().console.log;
log('something')
ログを開く:
元の質問に関連して、私はモハメド・マンスールによって受け入れられた答えに、この作品を他の方法にする方法もあると付け加えたいと思います。
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;
}
これは古い投稿であり、すでに適切な回答がありますが、2つのビットを追加します。 console.logを使用したくないので、コンソールにログを記録するロガーを使用するか、どこでも好きなので、このようなログ関数を定義するモジュールがあります
function log(...args) {
console.log(...args);
chrome.extension.getBackgroundPage().console.log(...args);
}
Log( "this is my log")を呼び出すと、ポップアップコンソールとバックグラウンドコンソールの両方にメッセージが書き込まれます。
利点は、コードを変更せずにログの動作を変更できることです(本番環境でログを無効にするなど)。