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

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

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

ملخّص: سيتم حظر جميع عمليات التنقّل بين المصادر في معالجات أحداث window.onunload لجعل Chrome متوافقًا مع مواصفات HTML بالإضافة إلى Firefox وSafari.

إشعار بإزالة ميزة | أداة تتبُّع حالة Chrome | خطأ في Chromium

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

إيقاف بروتوكول HTTP/0.9 نهائيًا

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

إشعار بإزالة ميزة | أداة تتبُّع حالة Chrome | خطأ في 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

ملخّص: تم إيقاف initTouchEvent نهائيًا واستبداله بـ TouchEvent constructor لتحسين التوافق مع المواصفات، وستتم إزالته نهائيًا في الإصدار 54 من Chrome.

إشعار بإزالة ميزة | أداة تتبُّع حالة Chrome | خطأ في Chromium

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

تحذير بشأن حدث لمس
تم إيقافها نهائيًا وستتم إزالتها في الإصدار 53 من Chrome، في أيلول (سبتمبر) 2016 تقريبًا.TouchEvent.initTouchEvent يُرجى استخدام أداة الإنشاء 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" في User-Agent، وسيتطابق Chrome على Android مع هذا الإيقاف النهائي وسيتم تنفيذه. لا يمكن إزالة هذه الميزة في الوقت الحالي، لأنّه ستظل هناك متصفحات أخرى تستند إلى WebKit وإصدارات قديمة من Blink على Android لفترة من الوقت، وستظل بحاجة إلى توفير الدعم لواجهة برمجة التطبيقات القديمة.

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

    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

ملخّص: ستتم إزالة السمة keyboardEvent.keyIdentifier التي لا تتوافق مع معايير الصناعة واستبدالها بالسمة KeyboardEvent.key المتوافقة مع المعايير.

إشعار بإزالة ميزة | أداة تتبُّع حالة Chrome | خطأ في 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 ended والسمة والسمة onended

ملخّص: ستتم إزالة الحدث والسمة ended ومعالج الأحداث onended لأنّهما تمت إزالتهما من مواصفات Media Capture and Streams.

إشعار بإزالة ميزة | أداة تتبُّع حالة Chrome | خطأ في Chromium

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

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

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

إشعار بإزالة ميزة | أداة تتبُّع حالة Chrome | خطأ في Chromium

إيقاف SVGViewElement.viewTarget نهائيًا

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

إشعار بإزالة ميزة | أداة تتبُّع حالة Chrome | خطأ في Chromium

Remove SVGZoomEvent

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

إشعار بإزالة ميزة | أداة تتبُّع حالة Chrome | خطأ في Chromium