Electron: يستهلك عنصر الإدخال الذي تمت إزالته من DOM ^ Z حتى يصبح مكدس التراجع فارغًا

تم إنشاؤها على ٣ ديسمبر ٢٠١٥  ·  3تعليقات  ·  مصدر: electron/electron

الحد الأدنى من repro: https://gist.github.com/DanielDignam/b49084941a2f731501d5

نحن نستخدم العقدة 4.1.1 و Chrome 45.0.2454.85 و Electron 0.35.2 على نظام التشغيل Windows 10

قم بتشغيل التطبيق المرفق. لاحظ ^ Z تقارير بشكل صحيح إلى وحدة التحكم. اكتب شيئًا ما في مربع الإدخال واضغط على الزر لإزالة العنصر من DOM. ضرب ^ Z لاحظ أنه لا يبلغ. اضغط على ^ Z مرة أخرى ولاحظ ذلك.

إذا قمت بإعادة تشغيل شيء ما ولصقه في مربع النص N من المرات ، فستلاحظ أن عدد حروف ^ Z التي يستغرقها قبل الإبلاغ عنها هو N + 1.

المعنى الضمني هو أن مربع الإدخال لا يزال يعالج الأحداث على الرغم من أنه لم يعد موجودًا في DOM ، ولا يمرر ^ Z حتى يفرغ مكدس التراجع.

يقطع هذا التراجع في تطبيقنا حيث لن يتم استعادة إجراءات التراجع للتطبيق على ^ Z إذا تم استخدام حقل إدخال ثم إزالته من DOM.

نريد التراجع عن حالة أخرى في طلبنا عندما لا يكون هناك نموذج / إدخال.

<!DOCTYPE html>
<html>
<head>
    <title>Hello World!</title>
</head>
<body id='body'>
<h1>Hello World!</h1>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
<script>
    function removeInput(event) {
        var i = document.getElementById("foo");
        var b = document.getElementById("body");
        b.removeChild(i);
    }
    const remote = require('electron').remote;
    const Menu = remote.Menu;
    const MenuItem = remote.MenuItem;
    var template = [
        {
            label: 'Edit',
            submenu: [
                {
                    label: 'Undo',
                    accelerator: 'CmdOrCtrl+Z',
                    click: function () {
                        console.log('Undo called');
                    },
                    enabled: true
                }
            ]
        }];
    menu = Menu.buildFromTemplate(template);
    Menu.setApplicationMenu(menu);
</script>
<input id='foo' type='text'/>
<input type='button' onclick='removeInput()'/>
</body>
</html>

ال 3 كومينتر

هذا خطأ في Chromium عند التعامل مع مدخلات DOM ، وأعتقد أن الحل هو التعامل مع الإدخال مع أحداث DOM يدويًا بدلاً من الاعتماد على مسرع القائمة.

لإصلاح ذلك ، يتعين علينا البحث في شفرة مصدر Chromium ، لكن هذا يتطلب الكثير من العمل. من غير المحتمل أن يعمل الإبلاغ عن ذلك إلى Chromium أيضًا لأن إعادة إنتاجه يجب عليك إضافة عنصر قائمة مخصص إلى Chrome ، وهو أمر غير ممكن.

أقوم بإغلاق هذا لأن لن يتم إصلاحه لأنه ربما لن ينظر أحد في الأمر ، ويمكنك التغلب عليه من خلال الاستماع إلى أحداث DOM الرئيسية.

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

أعمل على حل هذا الأمر عن طريق إنشاء عنصر القائمة بدون مسرع والاستماع إلى حدث مفتاح Ctrl + Z في العارض. هذا يعمل. ومع ذلك ، كيف يمكنني الآن إظهار الاختصار "Ctrl + Z" بجوار "تراجع" في القائمة؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات