Rumah >hujung hadapan web >tutorial js >Mengapa Skrip Kandungan Saya Tidak Boleh Mengakses chrome.tabs dan Bagaimana Saya Membetulkan Ralat 'Rujukan Tidak Ditakrifkan'?

Mengapa Skrip Kandungan Saya Tidak Boleh Mengakses chrome.tabs dan Bagaimana Saya Membetulkan Ralat 'Rujukan Tidak Ditakrifkan'?

Barbara Streisand
Barbara Streisandasal
2024-12-09 22:49:10214semak imbas

Why Can't My Content Script Access chrome.tabs and How Do I Fix the

Skrip Kandungan dan API Chrome: Ralat Rujukan Tidak Ditakrifkan

Apabila bekerja dengan skrip kandungan dalam sambungan Chrome, anda mungkin menghadapi ralat "Tidak boleh membaca property of undefined" apabila cuba mengakses API Chrome seperti chrome.tabs. Isu ini timbul walaupun memberikan kebenaran yang diperlukan dalam manifes.

Memahami Ketersediaan API Chrome

Skrip kandungan mempunyai akses terhad kepada API Chrome kerana pertimbangan keselamatan. Hanya kumpulan API terpilih boleh diakses dalam skrip kandungan:

  • chrome.i18n
  • chrome.dom
  • chrome.storage
  • Subset daripada chrome.runtime/chrome.extension

API seperti itu sebagai chrome.tabs, yang memanipulasi tab penyemak imbas, hanya tersedia dalam skrip latar belakang (atau pekerja perkhidmatan dalam Manifest V3), skrip pop timbul dan konteks sambungan lain.

Penyelesaian: Mesej Lulus

Untuk mengakses API Chrome yang tidak tersedia dalam skrip kandungan, anda mesti menghantar mesej daripada skrip kandungan ke skrip latar belakang. Skrip latar belakang kemudiannya boleh melaksanakan operasi API dan menghantar hasil kembali ke skrip kandungan.

Berikut ialah coretan kod yang menunjukkan pendekatan ini:

// content script:

chrome.runtime.sendMessage({ type: "getTabs" }, function(response) {
  console.log(response.tabs);
});

// background script:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.type == "getTabs") {
    chrome.tabs.query({}, function(tabs) {
      sendResponse({ tabs: tabs });
    });
  }
});

Dengan mengikuti pendekatan ini, anda boleh dengan berkesan akses API Chrome yang tidak tersedia dalam skrip kandungan sambil mengekalkan keselamatan dan enkapsulasi.

Atas ialah kandungan terperinci Mengapa Skrip Kandungan Saya Tidak Boleh Mengakses chrome.tabs dan Bagaimana Saya Membetulkan Ralat 'Rujukan Tidak Ditakrifkan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn