अनजाने में क्रोम एक्सटेंशन को पुनः लोड करना, विशेष रूप से डेवलपर मोड में, अनाथ सामग्री बना सकता है स्क्रिप्ट. ये स्क्रिप्ट पृष्ठभूमि में चलती रहती हैं लेकिन बाकी एक्सटेंशन के साथ संचार खो देती हैं, जिसके परिणामस्वरूप "एक्सटेंशन संदर्भ अमान्य" और "अनचेक रनटाइम.लास्ट एरर" जैसी त्रुटियां होती हैं।
The अनाथ सामग्री स्क्रिप्ट अभी भी DOM संदेश प्राप्त कर सकती है। इसे हटाने के लिए:
1. नई सामग्री स्क्रिप्ट से संदेश भेजें:
2। अनाथ स्क्रिप्ट में श्रोताओं को अपंजीकृत करें:
3. पृष्ठभूमि स्क्रिप्ट:
4. सामग्री स्क्रिप्ट:
5। पॉपअप स्क्रिप्ट:
उदाहरण कोड:
background.js:
// 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' });
});
});
content.js:
// 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;
}
popup.js:
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) {}
}
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3