سؤال

أنا أكتب تمديدًا إلى nosedit مما سيؤدي إلى لصق جميع النص الغني الصافي كنص عادي. يعمل الكود الخاص بي تمامًا في Chrome و IE7 ، لكنه يفشل في Firefox 3 (ويفترض أن Firefox 2 ، ولكن لأسباب مختلفة - لا سيما عدم وجود حدث لصق).

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

  • احصل على الاختيار الحالي والنطاق
  • إنشاء Div جديد مع contentEditable = true, وأضفه إلى DOM
  • انقل الكاريت إلى Div الجديد
  • قم بتعيين مهلة للحصول على HTML من Div الجديد ، وقم بتنظيفها ، ووضعها في الاختيار القديم (الذي أمسك به في الخطوة 1)
  • إرجاع صحيح (السماح للعجينة الأصلية بإكمال المحتوى في Div الجديد)

يبدو أنه يتم تنفيذ كل هذه الخطوات ، لكن العجينة لا تحدث أبدًا. لا أحصل على أخطاء في وحدة التحكم (مجرد تحذير يتعلق بخطأ في التحليل text-align - تم إسقاط الإعلان) ، ولا شيء مشبوه يحدث عندما أقوم بالتصحيح مع Firebug (باستثناء أن لصقتي تبدو فارغة ، وهي المشكلة).

التحذير يجعلني أعتقد أن Firefox قد لا يكون قادرًا على تحليل المحتوى الذي كنت ألصقه ، ولكن بدون رمز التقاطع الخاص بي ، أتمكن من لصقه في Noteditor على ما يرام.

لقد قمت بتحميل البرنامج النصي اختبار Firefox فقط على http://www.ryankinal.com/paste/firefox.html - هذا هو الكود الذي ينفذه Firefox من امتداد بلدي الكامل.

بضعة أشياء يجب ملاحظتها:

  • لقد أخذت قدرًا لا بأس به من الإلهام من البرنامج المساعد Tinymce Paste
  • أنا أستخدم بعض jQuery لاختيار العناصر
  • يبدو أن هناك بعض التعديل ل Function.prototype في nosedit ، والتي أجدها غريبا
  • يمكنني استخدام محرر نصية غني آخر ، لكن النظر في هذا التمرين في تصحيح الأخطاء
  • الكود المرتبط أعلاه مخصص فقط لـ Firefox
هل كانت مفيدة؟

المحلول

تكمن المشكلة في أن حدث اللصق قد فات الأوان لإعادة توجيه الكاريت في بعض المتصفحات ، بما في ذلك Firefox. ستتمكن من القيام بخدعة Caret-Redirect إذا قمت باعتراض اختصارات لوحة المفاتيح على اللصق (كنترول+الخامس, CMD+الخامس و يحول+إدراج) وتجاهل حدث اللصق ، ولكن هذا يعني أن المعاجين الناتجة عن السياق وتحرير قوائم لا يتم تغطيتها. أعتقد أن هذا هو أفضل ما يمكنك القيام به.

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