فشل معجون النص الغني في Firefox عند استخدام OnPaste
-
25-09-2019 - |
سؤال
أنا أكتب تمديدًا إلى 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+الخامس و يحول+إدراج) وتجاهل حدث اللصق ، ولكن هذا يعني أن المعاجين الناتجة عن السياق وتحرير قوائم لا يتم تغطيتها. أعتقد أن هذا هو أفضل ما يمكنك القيام به.