Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Mengelakkan \"Unchecked runtime.lastError: The Message Port Closed...\" Ralat dalam Sambungan Chrome?

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

Barbara Streisand
Barbara Streisandasal
2024-11-01 14:37:02668semak imbas

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>

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>

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!

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