سياسة Chromium بشأن مربعات حوار JavaScript

سجلّ مربّعات حوار JavaScript

تم تقديم JavaScript في عام 1995، وفي الإصدار الأول من JavaScript، كانت هناك طرق على كائن النافذة اسمه alert() وconfirm() وprompt().

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

ولهذا السبب، ينصح فريق Chromium بشدّة بعدم استخدام مربعات حوار JavaScript.

البدائل

هناك العديد من الخيارات لاستبدال مربّعات الحوار.

ثمة خيارات متعددة لـ "alert()/confirm()/prompt()". لإعلام مستخدم الأحداث (مثل مواقع التقويم)، يجب استخدام Notifications API. للحصول على البيانات التي أدخلها المستخدم، يجب استخدام عنصر HTML <dialog>. بالنسبة إلى إثباتات مفهوم XSS، يمكن استخدام console.log(document.origin) من أداة devtool.

أمّا بالنسبة إلى onbeforeunload، فتجدر الإشارة إلى أنّه غير موثوق به. تشير "إيليا غريغوريك" إلى أنّ "لا يمكنك الاعتماد على أحداث pagehide وbeforeunload وunload لتنشيطها على الأنظمة الأساسية للأجهزة الجوّالة". إذا كنت بحاجة إلى حفظ الحالة، عليك استخدام واجهة برمجة تطبيقات مستوى ظهور الصفحة.

التغييرات

إنّ إمكانية تحديد سلسلة onbeforeunload في إحدى الصفحات تمت إزالتها في الإصدار 51 من متصفّح Chrome. (وتمت إزالته أيضًا عن طريق متصفح Safari بدءًا من الإصدار 9.1 من Safari وفي الإصدار 4 من فايرفوكس).

تم تغيير مربّعات حوار alert()/confirm()/prompt() من كونها نمطية خاصة بالتطبيقات إلى يتم إغلاقها عند تبديل علامة التبويب هذه من. وقد تم إجراء هذا التغيير على جميع القنوات في بداية شهر أيار (مايو) 2017.

تتطلب مربّعات حوار beforeunload إيماءة مستخدم على الصفحة للسماح لها بالظهور بدءًا من Chrome 60. (ولا يؤدي ذلك إلى تغيير إرسال حدث beforeunload). يتوافق هذا الإجراء مع Chromium مع Firefox، الذي أجرى هذا التغيير مع Firefox 44.

سيؤدي عرض مربّع حوار alert()/confirm()/prompt() في وضع ملء الشاشة إلى فقدان وضع ملء الشاشة بدءًا من الإصدار 61 من Chrome.

لا تفعِّل prompt() مربّعات حوار علامة التبويب الخاصة بها. إذا تم استدعاء prompt() من علامة تبويب في الخلفية، سيتم عرض المكالمة على الفور ولن يتم عرض أي مربع حوار. لقد حدث هذا التغيير على جميع القنوات في بداية شهر أيار (مايو) 2017.

لا تفعِّل alert() مربّعات حوار علامة التبويب الخاصة بها. إذا تم استدعاء alert() من علامة تبويب الخلفية، فإن المكالمة تعود على الفور. يتم وضع علامة على علامة التبويب بمؤشر وسيظهر للمستخدم مربع حوار عند التبديل إلى علامة التبويب. يظهر هذا التغيير في السلوك بدءًا من الإصدار 64 من Chrome.

لا تفعِّل confirm() مربّعات حوار علامة التبويب الخاصة بها. إذا تم استدعاء confirm() من علامة تبويب في الخلفية، سيتم عرض المكالمة على الفور ولن يتم عرض أي مربع حوار. يظهر هذا التغيير في السلوك بدءًا من الإصدار 69 من Chrome.

وبسبب هذه التغييرات، إذا كان موقعك الإلكتروني يستخدم مربّعات حوار، ننصحك بشدّة بالانتقال إلى استخدام البدائل المذكورة سابقًا حتى لا يؤثر ذلك عليك.