Rumah > Artikel > hujung hadapan web > Bagaimana untuk Mengelakkan \"Unchecked runtime.lastError: The Message Port Closed...\" Ralat dalam Sambungan Chrome?
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!