عمليات إيقاف واجهة برمجة التطبيقات وإزالتها في Chrome 50

في كل إصدار تقريبًا من Chrome، نلاحظ عددًا كبيرًا من التحديثات والتحسينات للمنتج وأدائه بالإضافة إلى إمكانات النظام الأساسي على الويب.

في Chrome 50 (التاريخ التجريبي المقدّر: 10 إلى 17 آذار (مارس)) هناك عدد من التغييرات في Chrome. تخضع هذه القائمة للتغيير في أي وقت.

إيقاف AppCache نهائيًا في السياقات غير الآمنة

النص المختصر (TL;DR): لمنع البرمجة النصية على مستوى مواقع إلكترونية متعددة، سيتم إيقاف AppCache نهائيًا في المصادر غير الآمنة. نتوقع أن يعمل في الإصدار 52 من Chrome فقط على المصادر التي تعرض المحتوى عبر HTTPS.

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

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

يزيل Chrome متجه الهجوم هذا من خلال السماح له عبر بروتوكول HTTPS فقط. سيتم إيقاف دعم HTTP في Chrome 50 ونتوقع إزالته بالكامل في Chrome 52.

تمت إزالة Document.defaultCharset.

النص المختصر (TL;DR): تمت إزالة الرمز document.defaultCharset لتحسين الامتثال للمواصفات.

هدف الإزالة | Chromestatus Tracker | مشكلة CRBug

إنّ document.defaultCharset، التي تم إيقافها في Chrome 49، هي سمة للقراءة فقط تعرض ترميز الأحرف التلقائي لنظام المستخدم استنادًا إلى إعداداته الإقليمية. لم نعثر على فائدة في الحفاظ على هذه القيمة بسبب الطريقة التي تستخدم بها المتصفحات معلومات ترميز الأحرف في استجابة HTTP أو في العلامة الوصفية المضمّنة في الصفحة.

يمكنك بدلاً من ذلك استخدام document.characterSet للحصول على أول قيمة محدّدة في عنوان HTTP. في حال عدم توفّر هذه السمة، ستحصل على القيمة المحدّدة في السمة charset الخاصة بالعنصر <meta> (على سبيل المثال، <meta charset="utf-8">). وأخيرًا، إذا لم يكن أي منها متاحًا، سيتم ضبط القيمة document.characterSet على إعداد النظام لدى المستخدم.

يمكنك قراءة المزيد من النقاشات حول أسباب عدم تحديد ذلك في مشكلة github هذه

النص المختصر (TL;DR): عدم إتاحة القيمة subresource للسمة rel في HTMLLinkElement.

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

كان الغرض من السمة subresource على <link> هو جلب مورد مسبقًا أثناء وقت عدم نشاط المتصفّح. بعد أن ينزل المتصفح صفحة ما، يمكنه تنزيل الموارد مسبقًا مثل الصفحات الأخرى حتى يتم استردادها من ذاكرة التخزين المؤقت للمتصفح عندما يطلبها المستخدمون.

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

يمتلك المطورون الذين يتطلعون إلى تحسين تجربة المستخدم من خلال التحميل المسبق للمحتوى عددًا من الخيارات، أكثرها قابلية للتخصيص هو إنشاء مشغّل خدمات للاستفادة من التخزين المؤقت وواجهة برمجة تطبيقات Caches API. تشمل الحلول الإضافية قيمًا أخرى للسمة rel بما في ذلك preconnect وprefetch وpreload وprerender. بعض هذه الخيارات تجريبية وقد لا يتم دعمها على نطاق واسع.

إزالة الإجراء الاحتياطي لإصدار بروتوكول أمان طبقة النقل غير الآمن

النص المختصر (TL;DR): يمكنك إزالة آلية لإلزام الخوادم بعرض البيانات باستخدام إصدارات أقل أو غير آمنة من بروتوكول أمان طبقة النقل (TLS).

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

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

لن يتمكّن أي من المواقع الإلكترونية المتأثرة من الاتصال بـ ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION. على المشرفين التأكد من أن برامج الخادم محدَّثة. إذا لم يتم حل المشكلة، فاتصل بمورِّد برنامج الخادم لمعرفة ما إذا كان الحل متاحًا أم لا.

إزالة KeyboardEvent.prototype.keyLocation

النص المختصر (TL;DR): أزِل اسمًا مستعارًا غير ضروري للسمة Keyboard.prototype.location.

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

هذه السمة هي ببساطة اسم مستعار لسمة Keyboard.prototype.location، ما يسمح بالتمييز بين المفاتيح الموجودة في عدة أماكن على لوحة المفاتيح. على سبيل المثال، تتيح كلتا السمتَين للمطوّرين التمييز بين مفتاحَي Enter على لوحة المفاتيح الموسّعة.

معالِجات الخطأ والنجاح مطلوبة في طرق RTCPeerConnection.

النص المختصر (TL;DR): تتطلّب الآن طرق WebRTC RTCPeerConnection createOffer() وcreateAnswer() معالج الأخطاء بالإضافة إلى معالج للنجاح. في السابق، كان من الممكن استدعاء هذه الطرق باستخدام معالج نجاح فقط. تم إيقاف هذا الاستخدام.

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

في الإصدار 49 من Chrome، أضفنا تحذيرًا في حال طلبتَ setLocalDescription() أو setRemoteDescription() بدون تقديم معالج للأخطاء. تكون وسيطة معالج الخطأ إلزامية اعتبارًا من الإصدار 50 من Chrome.

وهذا جزء من توضيح الطريق لتقديم الوعود بشأن هذه الطرق، كما هو مطلوب من خلال مواصفات WebRTC.

في ما يلي مثال من العرض التوضيحي RTCPeerConnection (main.js، السطر 126):

    function onCreateOfferSuccess(desc) {
      pc1.setLocalDescription(desc, function() {
         onSetLocalSuccess(pc1);
      }, onSetSessionDescriptionError);
      pc2.setRemoteDescription(desc, function() {
        onSetRemoteSuccess(pc2);
      }, onSetSessionDescriptionError);
      pc2.createAnswer(onCreateAnswerSuccess, onCreateSessionDescriptionError);
    }

يُرجى العلم أنّ كلاً من setLocalDescription() وsetRemoteDescription() يتضمّنان معالج أخطاء. أما المتصفحات القديمة التي تتوقع أن معالج نجاح فقط، فستتجاهل ببساطة وسيطة معالج الخطأ إذا كانت موجودة؛ ولن يؤدي استدعاء هذه التعليمة البرمجية في متصفح قديم إلى حدوث استثناء.

بوجه عام، بالنسبة إلى تطبيقات WebRTC المتعلّقة بالإنتاج، ننصحك باستخدام adapter.js، وهو عنصر يتّبع حافظة مشروع WebRTC، لمنع التطبيقات من إجراء تغييرات في المواصفات واختلافات البادئات.

لم يعُد XMLHttpRequestProgressEvent متاحًا

النص المختصر (TL;DR): ستتم إزالة واجهة XMLHttpRequestProgressEvent، مع السمتَين position وtotalSize.

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

تم إنشاء هذا الحدث لإتاحة سمات التوافق مع Gecko position وtotalSize. وقد تم إيقاف دعم هذه الميزات الثلاثة في الإصدار 22 من Mozilla 22، واستبدلت وظائفها منذ فترة طويلة ProgressEvent بوظائفها.

     var progressBar = document.getElementById("p"),
          client = new XMLHttpRequest()
      client.open("GET", "magical-unicorns")
      client.onprogress = function(pe) {
        if(pe.lengthComputable) {
          progressBar.max = pe.total
          progressBar.value = pe.loaded
        }
      }

إزالة إضافات الوسائط المشفرة المسبوقة ببادئة

النص المختصر (TL;DR): تمت إزالة إضافات الوسائط المشفّرة المسبَقة المسبَقة لصالح استخدام استبدال غير مسبوق استنادًا إلى المواصفات.

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

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

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

إلغاء إمكانية استخدام سمات SVGElement.offset

النص المختصر (TL;DR): تم إلغاء سمات الإزاحة لـ SVGElement لصالح السمات المتوافقة على نطاق أوسع في HTMLElement.

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

لطالما كانت سمات الإزاحة متوافقة مع كل من HTMLElement وSVGElement، ولكن لا يمكن استخدام سمات Gecko وEdge إلا على HTMLElement. لتحسين الاتّساق بين المتصفحات، تم إيقاف هذه الخصائص نهائيًا في Chrome 48 وتجري الآن إزالتها.

على الرغم من أنّ السمات المكافئة هي جزء من HTMLElement، يمكن للمطوّرين الذين يبحثون عن بديل استخدام getBoundingClientRect() أيضًا.