عمليات الإيقاف والإزالة في Chrome 60

جو ميدلي
جو ميدلي

في كل إصدار تقريبًا من Chrome، نشهد عددًا كبيرًا من التحديثات والتحسينات للمنتج وأدائه وإمكانات "منصة الويب" أيضًا. توضّح هذه المقالة عمليات الإيقاف النهائي وعمليات الإزالة في Chrome 60، الذي يتوفَّر في إصدار تجريبي اعتبارًا من 8 حزيران (يونيو). تخضع هذه القائمة للتغيير في أي وقت.

الأمان

يتطلب crypto.subtle الآن مصدرًا آمنًا

إنّ Web Crypto API التي كانت متاحة منذ أن بدأ Chrome 37 في العمل دائمًا على مصادر غير آمنة. بسبب سياسة Chrome الراسخة التي تقضي بتفضيل المصادر الآمنة للميزات الفعّالة، لا يتم عرض crypto.subtle فقط على المصادر الآمنة.

هناك نية للإزالة | خطأ Chromium

إزالة عمليات التنقل في الإطار العلوي الذي تم بدؤه في المحتوى الرئيسي إلى عناوين URL للبيانات

بسبب عدم درايتها بالمستخدمين غير التقنيين، نلاحظ بشكل متزايد استخدام مخطط data: في هجمات الانتحال والتصيّد الاحتيالي. ولمنع حدوث ذلك، نحظر صفحات الويب من تحميل عناوين URL باللغة data: في الإطار العلوي. ينطبق ذلك على علامات <a> وwindow.open وwindow.location والآليات المشابهة. سيظل مخطط data: متاحًا للموارد التي تم تحميلها من خلال الصفحة.

تم إيقاف هذه الميزة نهائيًا في الإصدار 58 من Chrome وتمت إزالتها الآن.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

إيقاف navigator.sendBeacon() مؤقتًا لبعض الكائنات الثنائية الكبيرة

كانت الدالة navigator.sendBeacon() متاحة منذ إصدار Chrome 39. كما تم تنفيذها في الأصل، قد تحتوي الوسيطة data للدالة على أي كائن ثنائي كبير عشوائي نوعه ليس مدرجًا ضمن القائمة الآمنة CORS. ونعتقد أن هذا تهديد أمني محتمل، على الرغم من أن أحد لم يحاول استغلاله حتى الآن. وبما أنّه لا يتوفّر لدينا إصلاح فوري معقول لهذه المشكلة، لم يعُد من الممكن استدعاء sendBeacon() في الكائنات الثنائية التي يكون نوعها غير مدرج في قائمة CORS الآمنة.

على الرغم من تنفيذ هذا التغيير على الإصدار 60 من Chrome، تم دمجه مرة أخرى مع الإصدار 59 من Chrome.

خطأ في Chromium

CSS

جعل أداة الدمج الثانوي التي تخترق الظل تتصرف كأداة دمج تابعة

كان الهدف من أداة الدمج الثانوي (>>>) التي تخترق الظل (وهي جزء من المستوى 1 من وحدة CSS Scoping) مطابقة العناصر الثانوية لعنصر سابق معيّن حتى عند ظهورها داخل شجرة ظل. وكان لهذا بعض القيود. أولاً، وفقًا للمواصفات، لا يمكن استخدامه إلا في طلبات JavaScript مثل querySelector() كما أنه لم يعمل في أوراق الأنماط. والأهم من ذلك، لم يتمكن مورِّدو المتصفح من جعله يعمل خارج مستوى واحد من Shadow DOM.

وبالتالي، تمت إزالة أداة الدمج الفرعية من المواصفات ذات الصلة، بما في ذلك الإصدار 1 من Shadow DOM. بدلاً من تقسيم صفحات الويب عن طريق إزالة أداة الاختيار هذه من Chromium، اخترنا بدلاً من ذلك استخدام المجمِّع التابع ذي الثقب الظلي بدلاً من المجمِّع التابع. السلوك الأصلي تم إيقافه في Chrome 45. يتم تنفيذ السلوك الجديد في الإصدار 61 من Chrome.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

JavaScript

إيقاف وإزالة RTCPeerConnection.getStreamById()

قبل عامَين تقريبًا، تمت إزالة getStreamById() من مواصفات WebRTC، علمًا بأنّ معظم المتصفحات الأخرى قد أزالت هذا الإجراء من عمليات التنفيذ. يُعتقد أيضًا أنّ استخدام هذه الوظيفة قليل، لكن يُعتقد أيضًا أنّ هناك بعض المخاطر الصغيرة لإمكانية التشغيل التفاعلي مع المتصفحات المستندة إلى Edge وWebKit بخلاف Safari حيث لا يزال getStreamById() متاحًا. ويمكن للمطوّرين الذين يحتاجون إلى تنفيذ بديل العثور على رمز مثالي في Intent to Remove (هدف الإزالة) أدناه.

وتتوفّر عملية الإزالة في إصدار 62 من Chrome.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

إيقاف SVGPathElement.getPathSegAtLength

قبل أكثر من عامين، تمت إزالة getPathSegAtLength() من مواصفات الرسومات الموجّهة التي يمكن تغيير حجمها (SVG). ونظرًا لوجود عدد قليل من النتائج لهذه الطريقة في httparchive، سيتم إيقافها في Chrome 60. ومن المتوقّع أن تتم عملية الإزالة في إصدار 62 من Chrome، ومن المتوقّع أن يتم شحنها في أوائل شهر تشرين الأول (أكتوبر) أو منتصفه.

هدف الإيقاف | Chromestatus Tracker | خطأ Chromium

نقل getContextAttributes() خلف علامة

تم توفير الدالة getContextAttributes() على CanvasRenderingContext2D منذ عام 2013. ومع ذلك، لم تكن الميزة جزءًا من أي معيار ولم تصبح جزءًا من أحد المعايير منذ ذلك الوقت. كان من المفترَض أن يتم تنفيذ الإجراء خلف علامة سطر الأوامر --enable-experimental-canvas-features، لكن لم يتم تنفيذه عن طريق الخطأ. في Chrome 60، تم تصحيح هذا الخطأ. يُعتقد أن هذا التغيير آمن، نظرًا لعدم وجود بيانات توضح أن أي شخص يستخدم الطريقة.

خطأ في Chromium

إزالة Headers.prototype.getAll()

جارٍ إزالة دالة Headers.prototype.getAll() وفقًا لأحدث إصدار من مواصفات الجلب.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

إزالة indexDB.webkitGetDatabaseNames()

لقد أضفنا هذه الميزة عندما كانت قاعدة البيانات المفهرسة جديدة نسبيًا في Chrome وكانت البادئة بشكل كبير. تعرض واجهة برمجة التطبيقات بشكل غير متزامن قائمة بأسماء قاعدة البيانات الحالية في الأصل، وهو ما يبدو معقولاً بما فيه الكفاية.

للأسف، التصميم معيب، حيث قد تكون النتائج قديمة فور إعادتها، ولذلك يمكن استخدامها فقط لتسجيل الدخول، وليس منطق التطبيق الخطير. وتتتبّع مشكلة github أو روابط تؤدي إلى المناقشات السابقة حول البدائل، والتي قد تتطلّب نهجًا مختلفًا. على الرغم من اهتمام المطوّرين به من وقت إلى آخر، إلا أنّ مؤلفي المكتبة عالجوا هذه المشكلة بسبب عدم إحراز التقدّم على مستوى المتصفِّحات.

على المطوّرين الذين يحتاجون إلى هذه الوظيفة تطوير الحلول الخاصة بهم. تستخدم المكتبات مثل Dexie.js على سبيل المثال جدولاً عموميًا وهو في حد ذاته قاعدة بيانات أخرى لتتبع أسماء قواعد البيانات.

تم إيقاف هذه الميزة نهائيًا في الإصدار 58 من Chrome وتمت إزالتها الآن.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

إزالة WEBKIT_KEYframeS_ ويُسمّى WEBKIT_KEYframe_ ويُ

تتم إزالة الثوابت WEBKIT_KEYFRAMES_RULE وWEBKIT_KEYFRAME_RULE غير العادية من قاعدة CSS. على المطوّرين استخدام KEYFRAMES_RULE وKEYFRAME_RULE بدلاً من ذلك.

هدف الإزالة | Chromestatus Tracker | خطأ Chromium

واجهة المستخدم

إيماءة المستخدم مطلوبة لمربّعات حوار beforeunload

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

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

مع أنّ إمكانية عرض نص في مربّع الحوار beforeunload أُزيلت منذ فترة، لا تزال مربّعات حوار beforeunload تشكّل موجّهًا لإساءة الاستخدام. وعلى وجه الخصوص، تعد مربعات حوار beforeunload أحد مكونات المواقع الإلكترونية المخادعة، حيث توفر تشغيل الصوت تلقائيًا ونص التهديد سياقًا حيث تصبح رسالة "هل أنت متأكد من رغبتك في مغادرة هذه الصفحة" أمرًا مثيرًا للقلق.

نحن نريد ربط الإبرة والسماح فقط بالاستخدام الجيد لمربع حوار beforeunload. إن الاستخدامات الجيدة لمربع الحوار هي تلك التي يذكر فيها المستخدم أنه قد يكون مفقودًا. إذا لم يتفاعل المستخدم مع الصفحة مطلقًا، لن يتمكن المستخدم من معرفة أي حالة قد يتم فقدانها، وبالتالي لا نخاطر بفقدان بيانات المستخدم من خلال إيقاف مربع الحوار في هذه الحالة.