يمكن أن تؤدي إعادة تحميل ملحق Chrome عن غير قصد، وخاصة تلك الموجودة في وضع المطور، إلى إنشاء محتوى معزول مخطوطات. تظل هذه البرامج النصية قيد التشغيل في الخلفية ولكنها تفقد الاتصال ببقية الامتداد، مما يؤدي إلى حدوث أخطاء مثل "تم إبطال سياق الامتداد" و"runtime.lastError الذي لم يتم التحقق منه".
اليتيم لا يزال بإمكان البرنامج النصي للمحتوى تلقي رسائل 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:
وظيفة غير متزامنة sendMessage(data) { const [tab] = انتظار chrome.tabs.query({ active: true,currentWindow: true }); إذا (في انتظار ضمانContentScript(tab.id)) { العودة في انتظار chrome.tabs.sendMessage(tab.id, data); } } وظيفة غير متزامنة تأكدContentScript(tabId) { يحاول { const [{ result }] = انتظار chrome.scripting.executeScript({ الهدف: { معرف علامة التبويب }، func: () => window.running === صحيح، }); إذا (! النتيجة) { في انتظار chrome.scripting.executeScript({ الهدف: { معرف علامة التبويب }، الملفات: ['content.js']، }); } عودة صحيحة؛ } قبض (ه) {}تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3