google chrome extension :: console.log () dari halaman latar belakang?

173

Jika saya menelepon console.log('something');dari halaman popup, atau skrip apa pun yang disertakan berfungsi dengan baik.

Namun karena halaman latar belakang tidak secara langsung keluar dari halaman popup itu tidak termasuk dalam konsol.

Apakah ada cara yang bisa saya dapatkan console.log()di halaman latar belakang untuk muncul di konsol untuk halaman popup?

apakah ada cara untuk, dari halaman latar belakang memanggil fungsi di halaman popup?

Hailwood
sumber
Apa maksud Anda tepatnya dengan mengatakan "itu bekerja dengan baik"? Di mana membaca "sesuatu"? Menggunakan console.log () di jendela sembulan tidak boleh mencetak di konsol laman yang dimuat - karena pertanyaannya adalah 2 tahun, apakah perubahan API?
anddam
14
jika Anda klik kanan -> periksa sembulan pada tindakan browser Anda, Anda akan mendapatkan halaman alat pengembang untuk ekstensi Anda. popup.js akan mencetak log untuk itu.
not_shitashi
Komentar @ not_shitashi harus menjadi jawaban untuk pertanyaan ini.
gabe

Jawaban:

154

Setiap halaman ekstensi (kecuali skrip konten ) memiliki akses langsung ke halaman latar belakang via chrome.extension.getBackgroundPage().

Itu berarti, di dalam halaman popup , Anda bisa melakukan:

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

Untuk membuatnya lebih mudah digunakan:

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

Sekarang jika Anda ingin melakukan hal yang sama di dalam skrip konten Anda harus menggunakan Passing Pesan untuk mencapai itu. Alasannya, mereka berdua milik domain yang berbeda, yang masuk akal. Ada banyak contoh di halaman Passing Pesan untuk Anda periksa.

Semoga itu membersihkan segalanya.

Mohamed Mansour
sumber
1
@MohamedMansour, solusi ini tidak berfungsi untuk saya. Jika saya alert() chrome.extension.getBackgroundPage(), saya mengerti null. Apakah saya perlu mengatur perizinan atau konfigurasi lainnya?
gwg
@ gwg apakah ekstensi Anda memiliki halaman latar belakang? Menurut dokumentasi "Mengembalikan nol jika ekstensi tidak memiliki halaman latar belakang." developer.chrome.com/extensions/…
Mohamed Mansour
Ini berfungsi dengan baik untuk pesan saya sendiri ke konsol. Terima kasih. Adakah pemikiran tentang cara membuat pengecualian dll dari popup.js muncul di konsol background.js?
steven_noble
195

Anda dapat membuka konsol halaman latar belakang jika Anda mengklik tautan "background.html" di daftar ekstensi.

Untuk mengakses halaman latar belakang yang sesuai dengan ekstensi Anda, buka Settings / Extensionsatau buka tab baru dan masukkan chrome://extensions. Anda akan melihat sesuatu seperti tangkapan layar ini.

Dialog ekstensi Chrome

Di bawah ekstensi Anda, klik tautan tersebut background page. Ini membuka jendela baru. Untuk sampel menu konteks jendela memiliki judul: _generated_background_page.html.

serg
sumber
4
Cheers, saya tahu ini, tetapi membuka halaman latar belakang secara langsung tidak meminta apa pun dari halaman popup.
Hailwood
Membuka halaman latar belakang tidak menghasilkan informasi logging konsol.
Layke
@Hailwood membuka halaman latar belakang tidak meminta apa pun tetapi akan menampilkan konsol untuk halaman latar belakang.
anddam
1
@Layke setelah Anda membuka halaman latar belakang Anda masih harus menulis ke dalamnya, yaitu langsung menggunakan console.log () dari halaman latar belakang atau, seperti kata mohamed-mansour, memanggil metode yang sama pada objek yang dikembalikan oleh getBackgroundPage ()
anddam
3
Saya menemukan pertanyaan ini mencari cara memeriksa keluaran ekstensi (seperti OP) dan menemukan jawaban ini sangat berguna karena memungkinkan saya untuk memeriksa pembuatan konsol tanpa melewati halaman konten.
anddam
66

Untuk menjawab pertanyaan Anda secara langsung, saat Anda menelepon console.log("something")dari latar belakang, pesan ini dicatat, ke konsol halaman latar belakang. Untuk melihatnya, Anda dapat mengunjungi chrome://extensions/dan mengekliknya di inspect viewbawah ekstensi Anda.

Ketika Anda mengklik sembulan, itu dimuat ke halaman saat ini, sehingga console.log harus menampilkan pesan log di halaman saat ini.

songyy
sumber
Saya juga! Ini adalah yang paling sederhana dan langsung.
SaidbakR
ekstensi saya tidak memilikinya, ekstensi lain melakukannya! bagaimana cara mengaktifkannya
Ahmed Eid
Jika Anda memiliki 3 monitor seperti saya ... putar kepalamu. Itu membuka ChromeDevTools di ujung larik monitor saya dan saya tidak melihatnya.
buka
26

Anda masih dapat menggunakan console.log (), tetapi login ke konsol yang terpisah. Untuk melihatnya - klik kanan pada ikon ekstensi dan pilih "Periksa popup".

Lacho Tomov
sumber
12

Solusi paling sederhana adalah dengan menambahkan kode berikut di bagian atas file. Dan daripada Anda dapat menggunakan semua api konsol Chrome penuh seperti biasa.

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

Buka log:

  • Buka: chrome: // extensions /
  • Detail> Halaman latar belakang
O Fallante
sumber
Maukah Anda memberikan lebih banyak penjelasan untuk perintah Anda?
inetphantom
7

Coba ini, jika Anda ingin masuk ke konsol halaman aktif:

chrome.tabs.executeScript({
    code: 'console.log("addd")'
});
Faz
sumber
1
Membutuhkan izin host untuk tab saat ini.
Xan
Anda dapat menambahkannya untuk pengujian, dan menghapus jika Anda melepaskan addon.
Faz
1

Sehubungan dengan pertanyaan awal saya ingin menambahkan jawaban yang diterima oleh Mohamed Mansour bahwa ada juga cara untuk membuat ini bekerja sebaliknya:

Anda dapat mengakses halaman ekstensi lain (yaitu halaman opsi, halaman popup) dari dalam halaman latar belakang / skrip dengan chrome.extension.getViews()panggilan. Seperti dijelaskan di sini .

 // 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;
}
WoodrowShigeru
sumber
1

Itu posting lama, dengan jawaban yang sudah bagus, tapi saya menambahkan dua bit saya. Saya tidak suka menggunakan console.log, saya lebih suka menggunakan logger yang masuk ke konsol, atau di mana pun saya mau, jadi saya punya modul yang mendefinisikan fungsi log sedikit seperti ini

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

Ketika saya memanggil log ("ini log saya"), ia akan menulis pesan di konsol popup dan konsol latar belakang.

Keuntungannya adalah dapat mengubah perilaku log tanpa harus mengubah kode (seperti menonaktifkan log untuk produksi, dll ...)

Denis G.
sumber
0

Untuk mendapatkan log konsol dari halaman latar belakang, Anda perlu menulis cuplikan kode berikut di background.js halaman latar belakang Anda -

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

Kemudian muat ekstensi dan periksa halaman latar belakangnya untuk melihat log konsol.

Lanjutkan!!

Anushka Rai
sumber