ملحق Chrome - يتم إدخال البرنامج النصي للمحتوى عدة مرات لكل تحميل صفحة واحدة

StackOverflow https://stackoverflow.com/questions/7829895

سؤال

أواجه بعض المشكلات المتعلقة بإدخال نص برمجي للمحتوى في نفس الصفحة عدة مرات في ملحق Chrome الخاص بي.

أقوم بإدخال النص البرمجي للمحتوى من صفحة "background.html" الخاصة بي، عند تغيير علامة التبويب:

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){ 
    chrome.tabs.getSelected(null,function(tab){
         // Do some stuff
         chrome.tabs.executeScript(null, { code: code}, function(result){

...إلخ

داخل البرنامج النصي للمحتوى، لدي بعض أوامر console.log

المشكلة هي أنه عندما أقوم بتحميل صفحة واحدة، أرى كل سجل يظهر في وحدة التحكم 2-4 مرات.

من الواضح جدًا بالنسبة لي أن هذا يحدث بسبب إطارات iframe داخل الصفحة، على ما أعتقد على الأقل...سؤالي هو لماذا؟

لقد رأيت في الوثائق أنه يجب تعيين "all_frames" (مصفوفة أذونات البرنامج النصي للمحتوى في البيان) على "خطأ" افتراضيًا، مما يؤدي إلى إدخال البرنامج النصي للمحتوى فقط في الإطار العلوي للصفحة، ولكن هذا ببساطة لا يحدث !

لماذا يتم حقنه عدة مرات؟هل أحتاج إلى تعيين "all_frames" فعليًا على "خطأ"؟

ثانيًا:

هل هناك أي طريقة لمعرفة ما إذا كانت الصفحة التي يحاول الامتداد إدخال البرنامج النصي للمحتوى إليها هي iframe أو أعلى من داخل صفحة "background.html"؟

لقد حاولت

if(window.top === window){ console.log('whatever'); }

ووجدت أنها لا تعمل بنسبة 100٪ من الوقت.حتى عندما يكون لدي هذا الشرط حول بقية مجموعة التعليمات البرمجية الخاصة بي (حول chrome.tabs.executeScript() )، ما زلت أرى النص البرمجي للمحتوى يتم إدخاله عدة مرات....

أي أفكار أو اقتراحات ستكون محل التقدير!:)

هل كانت مفيدة؟

المحلول

onUpdated يتم تشغيله في كل مرة تتغير فيها حالة علامة التبويب.وهذا يشمل عندما يكون تحميل و تم التحميل, ، وهو ما يفسر العديد من بيانات السجل.يتعين عليك التحقق مما تم تغييره (تغيير عنوان URL، أو تحميله، وما إلى ذلك) في كل مرة يتم فيها تشغيل الحدث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top