Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Membetulkan Ralat \'Konteks Sambungan Tidak Sah\' Disebabkan oleh Skrip Kandungan Yatim dalam Sambungan Chrome?

Bagaimana untuk Membetulkan Ralat \'Konteks Sambungan Tidak Sah\' Disebabkan oleh Skrip Kandungan Yatim dalam Sambungan Chrome?

Susan Sarandon
Lepaskan: 2024-11-01 04:59:27
asal
904 orang telah melayarinya

How to Fix

Cara Mengalih Keluar Skrip Orphaned selepas Kemas Kini Sambungan Chrome

Masalah

Memuat semula sambungan Chrome secara tidak sengaja, terutamanya dalam mod pembangun, boleh mencipta kandungan yatim skrip. Skrip ini kekal berjalan di latar belakang tetapi kehilangan komunikasi dengan pelanjutan yang lain, mengakibatkan ralat seperti "konteks sambungan tidak sah" dan "masa jalan yang tidak ditanda.lastError".

Penyelesaian

Yang yatim piatu. skrip kandungan masih boleh menerima mesej DOM. Untuk mengalih keluarnya:

1. Hantar Mesej daripada Skrip Kandungan Baharu:

  • Dalam skrip kandungan baharu yang berfungsi, hantar mesej kepada skrip yatim menggunakan window.dispatchEvent.
  • Gunakan pengecam mesej unik , seperti orphanMessageId.

2. Nyahdaftar Pendengar dalam Skrip Orphaned:

  • Dalam skrip yatim, tentukan pendengar untuk orphanMessageId.
  • Dalam pendengar ini, nyahdaftar semua pendengar terdahulu dan batalkan pembolehubah global.
  • Ini menjadikan skrip lama layak untuk kutipan sampah.

3. Skrip Latar Belakang:

  • Suntikan semula skrip kandungan pada muat semula/pasang sambungan.

4. Skrip Kandungan:

  • Gunakan fungsi yang dinamakan untuk pendengar acara untuk mengekalkan rujukan mereka.
  • Tetapkan window.running property untuk menunjukkan kejadian yang aktif.
  • Apabila menerima orphanMessageId, nyahdaftar pendengar dan tandai skrip sebagai yatim.

5. Skrip Pop Timbul:

  • Semak sama ada skrip kandungan berfungsi hadir sebelum menghantar mesej.
  • Gunakan ensureContentScript untuk memastikan suntikan skrip.

Contoh Kod:

background.js:

<code class="javascript">// Re-inject content script
chrome.runtime.onInstalled.addListener(() => {
  chrome.tabs.query({ active: true, currentWindow: true }, tabs => {
    chrome.tabs.executeScript(tabs[0].id, { file: 'content.js' });
  });
});</code>
Salin selepas log masuk

content.js:

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

// Register named listeners
chrome.runtime.onMessage.addListener(onMessage);
document.addEventListener('mousemove', onMouseMove);

// Orphan flag and cleanup function
window.running = true;

function unregisterOrphan() {
  if (chrome.runtime.id) {
    // Not orphaned
    return;
  }
  window.removeEventListener(orphanMessageId, unregisterOrphan);
  document.removeEventListener('mousemove', onMouseMove);
  try {
    chrome.runtime.onMessage.removeListener(onMessage);
  } catch (e) {}
  return true;
}</code>
Salin selepas log masuk

popup.js:

<code class="javascript">async function sendMessage(data) {
  const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
  if (await ensureContentScript(tab.id)) {
    return await chrome.tabs.sendMessage(tab.id, data);
  }
}

async function ensureContentScript(tabId) {
  try {
    const [{ result }] = await chrome.scripting.executeScript({
      target: { tabId },
      func: () => window.running === true,
    });
    if (!result) {
      await chrome.scripting.executeScript({
        target: { tabId },
        files: ['content.js'],
      });
    }
    return true;
  } catch (e) {}
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat \'Konteks Sambungan Tidak Sah\' Disebabkan oleh Skrip Kandungan Yatim 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