تصحيح أخطاء ملحق Firefox - كيف ترى جميع ملفات JS وXUL الموجودة في XPI؟

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

سؤال

أحاول تصحيح ملحق Firefox، باستخدام Firefox 28.0.

لقد قمت بإعداد بيئة التطوير كما هو مقترح في https://developer.mozilla.org/en-US/Add-ons/Setting_up_extension_development_environment (في الواقع لقد اتخذت للتو الطريق البطيء وقمت بتثبيت ملحق DevPrefs لتعيين كل ما يلزم حول: التكوينات)

بعد ذلك، أفتح Firefox وانتقل إلى بيئة تصحيح الأخطاء (Tools > Web Developer > Browser Toolbox).

ثم أذهب إلى علامة التبويب Debugger.

ومع ذلك، ضمن جزء المصادر، ضمن الامتداد الخاص بي (على سبيل المثال.chrome://myextension)، أرى فقط بعض ملفات JS وXUL المضمنة في الامتداد XPI الخاص بي.

كيف يمكنني "تحميل الملفات" يدويًا في مصحح الأخطاء، حتى أتمكن من تعيين نقطة توقف وتتبع وقت تشغيل الامتداد الخاص بي؟

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

المحلول

لا يحتوي مصحح الأخطاء على أي وظيفة تسمح بتحميل الملفات "يدويًا"، وبدلاً من ذلك سيعرض لك كل ملف تم تحميله حاليًا بواسطة محرك JavaScript.إذا بحثت في التفاصيل، فهذا يعني أنه عندما يقوم محرك JavaScript بتجميع برنامج نصي جديد، يتم إخطار مصحح الأخطاء ويضيف الملف المقابل إلى قائمته.لذلك عادةً كل ما عليك فعله هو فتح صفحة أو مربع حوار يستخدم هذا البرنامج النصي وسيصبح مرئيًا في مصحح الأخطاء.أقول "بشكل طبيعي" لأنه في اختباراتي يبدو أن هذا لا يعمل بشكل موثوق - يبدو أن هناك بعض الأخطاء التي تجعل مصحح الأخطاء يفوت بعض البرامج النصية، ربما هذا هو ما دفع سؤالك.

الآن بالطبع يمكنك التفكير في تزوير الإشعار لإجبار مصحح الأخطاء على تحميل ملف معين - على سبيل المثال.إذا كنت تريد تعيين نقاط التوقف قبل تحميل الملف فعليًا.لقد قمت بتجربتها وهي ممكنة بالفعل، ولكنها تتطلب منك العبث بالمكونات الداخلية لمتصفح Firefox وتعتمد على عدد من تفاصيل التنفيذ التي قد تتغير في إصدارات Firefox المستقبلية.على وجه الخصوص، تحتاج إلى الحصول على DebuggerServer المثيل المستخدم للتواصل مع مصحح الأخطاء.بينما يستخدم مصحح الأخطاء قيد التشغيل دائمًا نفس المثيل وهو أمر تافه للحصول عليه، يتم إنشاء مثيل جديد لكل مصحح أخطاء عن بعد.مما أستطيع أن أقوله، الوصول إلى هذا المثال لا يمكن تحقيقه إلا من خلال التغييرات التي تم تنفيذها الخطأ 993029 مما يعني أنه سيعمل فقط مع Firefox 32 (المتوفر حاليًا من قناة فايرفوكس أورورا) و ما فوق.

المشكلة هي أن DebuggerServer يتم إنشاء المثيل بواسطة BrowserToolboxProcess أعلن الصف في ToolboxProcess.jsm.قبل التغييرات التي أدخلها الخطأ 993029 أ BrowserToolboxProcess سيتم إنشاء الكائن وعدم الاحتفاظ بأي إشارة إليه - مما يعني أنه سيكون من المستحيل الوصول إليه وإلى الاتصال المقابل بعد حدوثه.بدءًا من Firefox 32، تم إنشاء كل شيء BrowserToolboxProcess يتم تخزين الكائنات في processes تعيين ويمكن تعدادها.

يمكن استخدام هذا الرمز لتزييف ملف استدعاء Debugger.onNewScript() والتي سيتم إعادة توجيهها إلى مصحح الأخطاء عن بعد:

(function()
{
  // Iterate over existing processes
  const {processes} = Cu.import("resource:///modules/devtools/ToolboxProcess.jsm", null);
  for (var process of processes)
  {
    // Iterate over connections associated with each process
    var debuggerServer = process.debuggerServer;
    for (var connID in debuggerServer._connections)
    {
      if (!debuggerServer._connections.hasOwnProperty(connID))
        continue;
      var conn = debuggerServer._connections[connID];

      // Get ChromeDebuggerActor instance for the connection
      var chromeDebugger = conn._getOrCreateActor(conn.rootActor._extraActors.chromeDebugger.actorID);

      // Fake new script call
      chromeDebugger.onNewScript({
        url: "chrome://myextension/content/script.js", // CHANGE THAT LINE
        source: {text:""},
        getChildScripts: () => []
      });
    }
  }
})();

كما ذكرنا سابقًا، يجب أن يعمل هذا الرمز فقط بدءًا من Firefox 32، لقد قمت باختباره على Firefox 33.0a1.يمكنك تشغيله من المسودة، تأكد من ذلك تبديل البيئة إلى "المتصفح".ليس هناك ما يضمن على الإطلاق أنه سيستمر في العمل في إصدارات Firefox المستقبلية، فهناك العديد من تفاصيل التنفيذ المستخدمة هنا والتي يمكن أن تتغير في أي وقت.

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