Bagaimana untuk Mengelakkan \'Unchecked runtime.lastError: The Message Port Closed...\' Ralat dalam Sambungan Chrome?

Barbara Streisand
Lepaskan: 2024-11-01 14:37:02
asal
667 orang telah melayarinya

How to Prevent

Mendedahkan Pesalah: Skrip Yatim dan Kemas Kini Sambungan

Selepas memuatkan semula sambungan Chrome secara tidak sengaja, anda mungkin menghadapi ralat yang menjengkelkan: "Masa jalan yang tidak disemak .lastError: Port mesej ditutup sebelum respons diterima." Ralat ini berpunca daripada penciptaan skrip yatim, yang memutuskan komunikasi antara halaman pop timbul dan kandungan.

Memahami Konsep Skrip Yatim

Skrip yatim ialah peninggalan hantu daripada sambungan yang dimuatkan sebelum ini yang terus berlarutan walaupun selepas sambungan telah dikemas kini atau dimuat semula. Skrip hantu ini memintas mesej yang dimaksudkan untuk skrip kandungan baharu, yang membawa kepada gangguan komunikasi.

Membasmi Skrip Yatim

Untuk menghapuskan skrip spektrum ini, kita mesti memastikan sama ada ia masih responsif. Jika ya, kami boleh menghantar mesej daripada skrip kandungan baharu melalui objek tetingkap. Setelah menerima mesej ini, skrip yatim harus membatalkan pendaftaran semua pendengar acara dan bersedia untuk pengumpulan sampah.

Mengisi Skrip Kandungan semasa Memuat Semula

Untuk mengelakkan isu ini berulang, kami boleh menyemak kehadiran skrip kandungan yang boleh digunakan sebelum menghantar mesej daripada halaman pop timbul. Jika tiada, kami boleh menyuntik skrip kandungan sekali lagi.

Kod Contoh untuk Skrip Kandungan

Untuk melaksanakan penyelesaian yang disebutkan di atas, masukkan skrip content.js yang dipinda ini:

<code class="javascript">var orphanMessageId = chrome.runtime.id + 'orphanCheck';
window.dispatchEvent(new Event(orphanMessageId));
window.addEventListener(orphanMessageId, unregisterOrphan);

// ... (register named functions for event listeners)

window.running = true;

function unregisterOrphan() {
  // ... (deregister listeners and nullify variables)
}

function onMessage(msg, sender, sendResponse) {
  // ... (handle message)
}

function onMouseMove(event) {
  // ... (DOM event handler)
}</code>
Salin selepas log masuk

Pengesahan Halaman Pop Timbul

Untuk memastikan skrip kandungan disuntik sebelum penghantaran mesej, tingkatkan skrip popup.js dengan coretan ini:

<code class="javascript">async function sendMessage(data) {
  // ... (fetch active tab)
  if (await ensureContentScript(tab.id)) {
    return await chrome.tabs.sendMessage(tab.id, data);
  }
}

async function ensureContentScript(tabId) {
  // ... (check for existing content script)
  if (!result) {
    await chrome.scripting.executeScript({
      // ... (inject content script)
    });
  }
  return true;
}</code>
Salin selepas log masuk

Dengan melaksanakan langkah-langkah ini, anda boleh membuang skrip yatim piatu dan mengekalkan komunikasi yang lancar antara halaman pop timbul dan kandungan sambungan anda.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan \'Unchecked runtime.lastError: The Message Port Closed...\' Ralat dalam Sambungan Chrome?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!