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

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

إيقاف عمليات الانتقال في معالج إلغاء التحميل

النص المختصر (TL;DR): لن يُسمَح بجميع عمليات الانتقال من مصادر متعددة في معالِجات أحداث "window.onunload" لدمج متصفِّح Chrome مع مواصفات HTML، بالإضافة إلى متصفِّحَي Firefox وSafari.

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

كانت الإصدارات السابقة من Chrome تسمح بإيقاف التنقل المشترك المصدر داخل window.onunload. من خلال ضبط window.location.href = '#fragment' وفقًا لمواصفات HTML، لا يُسمح إلا بالتنقل داخل الصفحة في معالِجات إلغاء التحميل، وفي الإصدارات السابقة من Chrome، تم حظر طرق التنقل الأخرى حسب ما تتطلب المواصفات. وبدءًا من الإصدار 54 من Chrome، لن يُسمح بعمليات التنقل هذه لتكون متوافقة مع المواصفات، بالإضافة إلى Firefox وSafari.

HTTP/0.9 متوقف نهائيًا

TL;DR: تم إيقاف HTTP/0.9 نهائيًا. على المطوّرين الانتقال إلى إصدار أحدث، ويفضَّل استخدام HTTP/2.

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

HTTP/0.9 هو الإصدار السابق لبروتوكول HTTP/1.x. تفتقر إلى العديد من ميزات العناصر التابعة لها. مصدر قلق خاص لشبكة الويب الحديثة هو عدم توفر عناوين استجابة. وبدونهما، لا يمكن التحقق من أنّ استجابة HTTP/0.9 هي استجابة HTTP/0.9 حقًا. وقد يؤدي ذلك إلى حدوث عدة مشاكل. تشمل المشاكل، من بين مشاكل أخرى، ما يلي:

  • برامج تتعامل مع استجابات خطأ معيّنة كاستجابات HTTP/0.9 صالحة
  • الخوادم التي تفشل في إغلاق مقبس الطلب مما يتسبب في معالجة العملاء للاستجابات باعتبارها GET معلّقًا والتي إما تبقى نشطة على الدوام أو حتى ينتقل المستخدم من صفحة قدمت الطلب.
  • الخوادم التي لا يمكنها الإشارة إلى المتصفح بفشل الطلب، والتي يمكن أن تتسبب في مشكلات في الأساليب الإرشادية للتخزين المؤقت.

الطريقة الوحيدة المضمونة لإصلاح مشاكل HTTP/0.9 هي إزالة الدعم تمامًا. لهذا السبب يتم إزالة دعم HTTP/0.9 في الإصدار 54 من Chrome.

لم يعُد بإمكانك استخدام "initTouchEvent"

النص المختصر (TL;DR): تم إيقاف واجهة برمجة التطبيقات initTouchEvent نهائيًا لصالح TouchEvent constructor لتحسين الامتثال للمواصفات، وستتم إزالتها نهائيًا في الإصدار 54 من Chrome.

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

لفترة طويلة، تمكّن مطوّرو البرامج من إنشاء أحداث لمس اصطناعية في Chrome باستخدام initTouchEvent API. وتُستخدم هذه الأحداث بشكل متكرر لمحاكاة أحداث اللمس لاختبار بعض واجهات المستخدم في موقعك الإلكتروني أو تشغيلها آليًا. بدءًا من إصدار Chrome 49، عرضت واجهة برمجة التطبيقات التي تم إيقافها هذه التحذير التالي .

تحذير بشأن حدث لمس
تم إيقاف TouchEvent.initTouchEvent نهائيًا وستتم إزالته في الإصدار الرئيسي M53 في أيلول (سبتمبر) 2016 تقريبًا. يُرجى استخدام الدالة الإنشائية TouchEvent بدلاً من ذلك. يمكنك الاطّلاع على https://www.chromestatus.com/features/5730982598541312 للحصول على مزيد من التفاصيل.

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

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

بما أنّ عمليات تنفيذ واجهة برمجة التطبيقات initTouchEvent في نظامَي التشغيل iOS وAndroid/Chrome كانت مختلفة جدًا، كانت المواقع الإلكترونية غالبًا ما تتضمّن رموزًا متوافقة مع أسطر (غير غالبًا ما يتم استخدام Firefox)

    var event = document.createEvent('TouchEvent');
    
    if(ua === 'Android') {
      event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
        300, 300, 200, 200, false, false, false, false);
    } else {
      event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
        200, false, false, false, false, touches, targetTouches, changedTouches, 0, 0);
    }
    
    document.body.dispatchEvent(touchEvent);

وهذا أمر سيئ، لأنّه يبحث عن "Android" في وكيل المستخدم وChrome على Android ويتأثر بهذا الإيقاف النهائي. لا يمكن إزالتها بعد، لأنه ستكون هناك متصفحات أخرى تستند إلى WebKit ومتصفحات قديمة تستخدم Blink على Android لفترة من الوقت، والتي ستظل بحاجة إلى دعم واجهة برمجة التطبيقات القديمة لفترة من الوقت.

لمعالجة TouchEvent على الويب بشكل صحيح، يجب تغيير الرمز البرمجي للتوافق مع Firefox وIE Edge وChrome من خلال التحقّق من وجود TouchEvent على الكائن window وما إذا كان له "length" (طول) موجبة (مع الإشارة إلى أنّه دالة إنشائية تستخدم وسيطة)، عليك استخدام ذلك.

    if('TouchEvent' in window && TouchEvent.length > 0) {
      var touch = new Touch({
        identifier: 42,
        target: document.body,
        clientX: 200,
        clientY: 200,
        screenX: 300,
        screenY: 300,
        pageX: 200,
        pageY: 200,
        radiusX: 5,
        radiusY: 5
      });
    
      event = new TouchEvent("touchstart", {
        cancelable: true,
        bubbles: true,
        touches: [touch],
        targetTouches: [touch],
        changedTouches: [touch]
      });
    }
    else {
      event = document.createEvent('TouchEvent');
    
      if(ua === 'Android') {
        event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
          300, 300, 200, 200, false, false, false, false);
      } else {
        event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
          200, false, false, false, false, touches, targetTouches, 
          changedTouches, 0, 0);
      }
    }
    
    document.body.dispatchEvent(touchEvent);

تمت إزالة سمة KeyboardEvent.keyidentifier

النص المختصر (TL;DR): تتم إزالة سمة keyboardEvent.keyIdentifier التي لا تتوافق مع بعض البيانات لصالح موقع KeyboardEvent.key المستنِد إلى المعايير.

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

كانت السمة keyboardEvent.keyIdentifier جزءًا من مواصفات W3C باختصار في عامَي 2009 و2010. ومع ذلك، لم يتم تنفيذه إلا في WebKit.

ويمكن للمطوّرين الذين يحتاجون إلى استبدال هذه السمة استخدام السمة KeyboardEvent.key المستندة إلى المعايير أو السمة KeyboardEvent.code (كما هو موضّح في مقالة قدّمناها في فصل الربيع الماضي). ويتميّز الإصدار السابق بأوسع قاعدة تنفيذ، ويتوافق مع جميع المتصفّحات الرئيسية المتوافقة مع أجهزة الكمبيوتر المكتبي باستثناء Safari. يتوفّر الإصدار الأحدث حاليًا على Chrome وFirefox وOpera. تهدف إزالة هذه الميزة إلى زيادة استخدام الموقع الإلكتروني على KeyboardEvent.key. وما من معلومات من Apple عما إذا كانت ستوفِّر هذه الميزة أم لا، إلا أنّ السمتَين KeyboardEvent.keyCode وKeyboardEvent.charCode المتوقفتَين نهائيًا (ولكن لم تتم إزالتهما بعد من متصفِّح Chrome) ما زالا متوفّرَين على متصفّح Safari.

إزالة الحدث والسمة المنتهية في MediaStream والسمة المرتبطة

النص المختصر (TL;DR): تتم إزالة الحدث وسمة ended ومعالج أحداث onended بسبب إزالةهما من مواصفات التقاط الوسائط ومصادر البيانات.

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

لم يكن حدث ended أو معالج أحداث onended جزءًا من مواصفات WebRTC لمدة ثلاث سنوات تقريبًا. على المطوّرين الذين يريدون مشاهدة الأحداث استخدام MediaStreamTracks بدلاً من MediaStreams.

إيقاف SVGElement.viewPort نهائيًا

ولم تتم عملية التنفيذ في Chrome منذ عام 2012. لا تتوفر السمة على الإطلاق في المتصفحات الأخرى وقد تمت إزالتها من المواصفات. لهذه الأسباب، تم إيقاف الموقع نهائيًا. من المتوقَّع إجراء الإزالة في الإصدار 55 من Chrome.

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

إيقاف SVGViewElement.viewTarget

لا تشكّل السمة SVGViewElement.viewTarget جزءًا من مواصفات SVG2.0 ويستخدمها صغير أو غير متوفّر. تم إيقاف هذه السمة نهائيًا في الإصدار 54 من Chrome. من المتوقَّع إجراء الإزالة في الإصدار 56 من Chrome.

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

إزالة SVGZoomEvent

لا تشكّل SVGZoomEvent جزءًا من مواصفات SVG2.0 ولا تعمل في Chromium. على الرغم من أنها لا تزال قابلة للاكتشاف، مما يؤدي إلى إرباك محتمل لدى المطوّرين. ستتم إزالته.

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