Bagaimana untuk mengalih keluar Skrip Yatim Selepas Kemas Kini Sambungan Chrome?

Patricia Arquette
Lepaskan: 2024-11-02 04:53:02
asal
417 orang telah melayarinya

How to Remove Orphaned Script After Chrome Extension Update?

Cara Mengalih Keluar Skrip Yatim Selepas Kemas Kini Sambungan Chrome

Masalah:

Apabila sambungan Chrome dimuat semula, kandungan menjadi yatim skrip boleh kekal, membawa kepada ralat dan isu komunikasi dengan bahagian lain sambungan. Isu ini berlaku jika skrip kandungan asal mempunyai pendengar acara DOM, menghalang pengalihan keluar automatiknya.

Penyelesaian:

Untuk mengalih keluar skrip yatim:

  1. Hantar mesej daripada skrip kandungan baharu yang berfungsi kepada skrip yatim menggunakan Tetingkap.
  2. Setelah menerima mesej, skrip yatim harus menyahdaftar semua pendengar dan pembolehubah global. Ini akan menjadikannya layak untuk kutipan sampah.

Contoh Kod:

latar belakang.js:

<code class="javascript">// Re-inject content scripts on reloading/installing the extension
// (See example in link provided in QA)</code>
Salin selepas log masuk

content.js:

<code class="javascript">// Generate a unique message ID for the orphan check
const orphanMessageId = chrome.runtime.id + 'orphanCheck';

// Register a listener for the orphan check message
window.addEventListener(orphanMessageId, unregisterOrphan);

// ... (Continue with original content script code) ...

// Function to unregister the orphaned script
function unregisterOrphan() {
  // Check if the extension is uninstalled
  if (!chrome.runtime.id) {
    // The script is not orphaned
    return;
  }
  
  // Remove the orphan message listener
  window.removeEventListener(orphanMessageId, unregisterOrphan);

  // Remove DOM event listeners
  document.removeEventListener('mousemove', onMouseMove);

  // Remove runtime message listener (try-catch required in some cases)
  try {
    chrome.runtime.onMessage.removeListener(onMessage);
  } catch (e) {}
}</code>
Salin selepas log masuk

popup.js:

<code class="javascript">// Function to send a message and ensure a content script is injected before doing so
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);
  }
}

// Function to check if a content script is running and re-inject it if not
async function ensureContentScript(tabId) {
  try {
    // Check if the content script is running
    const [{ result }] = await chrome.scripting.executeScript({
      target: { tabId },
      func: () => window.running === true,
    });
    
    // If not, inject the content script
    if (!result) {
      await chrome.scripting.executeScript({
        target: { tabId },
        files: ['content.js'],
      });
    }
    
    return true;
  } catch (e) {}
}</code>
Salin selepas log masuk

Dengan pendekatan ini, skrip yatim akan dibersihkan dan komunikasi dengan sambungan yang lain boleh dipulihkan.

Atas ialah kandungan terperinci Bagaimana untuk mengalih keluar Skrip Yatim Selepas Kemas Kini 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!