حذف و حذف API در Chrome 54

تقریباً در هر نسخه کروم، شاهد تعداد قابل توجهی از به‌روزرسانی‌ها و بهبودها در محصول، عملکرد آن و همچنین قابلیت‌های پلتفرم وب هستیم. این مقاله لغو و حذف Chrome 54 را شرح می‌دهد که از 15 سپتامبر در نسخه بتا است. این فهرست در هر زمان ممکن است تغییر کند.

ناوبری را در کنترل کننده بارگیری غیرفعال کنید

TL;DR: همه پیمایش‌های متقاطع در کنترل‌کننده‌های رویداد window.onunload غیرمجاز خواهند بود تا کروم را با مشخصات HTML و همچنین فایرفاکس و سافاری هماهنگ کنند.

قصد حذف | ردیاب Chromestatus | اشکال کروم

نسخه‌های قبلی Chrome اجازه می‌داد پیمایش با مبدا متقابل در داخل window.onunload قطع شود. با تنظیم window.location.href = '#fragment' . با توجه به مشخصات HTML ، فقط پیمایش های درون صفحه در کنترل کننده های بارگیری مجاز است و در نسخه های قبلی Chrome سایر روش های پیمایش مطابق با مشخصات مسدود شده بودند. از Chrome 54، چنین پیمایش‌هایی غیرمجاز خواهند بود تا ما را با مشخصات و همچنین فایرفاکس و سافاری مطابقت دهند.

HTTP/0.9 منسوخ شده است

TL;DR: HTTP/0.9 منسوخ شده است. توسعه دهندگان باید به نسخه بعدی، ترجیحا HTTP/2 منتقل شوند.

قصد حذف | ردیاب Chromestatus | اشکال کروم

HTTP/0.9 سلف HTTP/1.x است . فاقد بسیاری از ویژگی های جانشینان خود است. یک نگرانی خاص برای وب مدرن عدم وجود هدر پاسخ آن است. بدون آنها، هیچ راهی برای تأیید اینکه پاسخ HTTP/0.9 واقعاً یک پاسخ HTTP/0.9 است وجود ندارد. این می تواند چندین مشکل ایجاد کند. به عنوان مثال، از جمله مشکلات دیگر عبارتند از:

  • کلاینت هایی که پاسخ های خطای خاصی را به عنوان پاسخ های معتبر HTTP/0.9 تلقی می کنند.
  • سرورهایی که سوکت درخواست را نمی‌بندند و باعث می‌شوند مشتریان پاسخ‌ها را به‌عنوان یک GET معلق در نظر بگیرند که یا برای همیشه زنده می‌ماند یا تا زمانی که کاربر از صفحه‌ای که درخواست را داده است حرکت کند.
  • سرورهایی که نمی توانند به مرورگر نشان دهند که یک درخواست شکست خورده است، که می تواند باعث ایجاد مشکلاتی در حافظه پنهان اکتشافی شود.

تنها راه بی‌خطر برای رفع مشکلات HTTP/0.9 حذف کامل پشتیبانی است. به همین دلیل است که پشتیبانی از HTTP/0.9 در Chrome 54 حذف شده است.

استفاده از initTouchEvent حذف شده است

TL;DR : initTouchEvent به نفع constructor TouchEvent منسوخ شده است تا انطباق با مشخصات را بهبود بخشد و به طور کلی در Chrome 54 حذف خواهد شد.

قصد حذف | ردیاب Chromestatus | اشکال کروم

برای مدت طولانی توسعه دهندگان قادر به ایجاد رویدادهای لمس مصنوعی در Chrome با استفاده از initTouchEvent API بوده اند. اینها اغلب برای شبیه‌سازی رویدادهای لمسی برای آزمایش یا خودکار کردن برخی از رابط‌های کاربری در سایت شما استفاده می‌شوند. از Chrome 49، این API منسوخ شده هشدار زیر را نشان می‌دهد.

هشدار رویداد را لمس کنید
TouchEvent.initTouchEvent منسوخ شده است و در M53 در حدود سپتامبر 2016 حذف خواهد شد. لطفاً به جای آن از سازنده TouchEvent استفاده کنید. برای جزئیات بیشتر به https://www.chromestatus.com/features/5730982598541312 مراجعه کنید.

جدای از اینکه در مشخصات Touch Events قرار نگرفته‌ایم، دلایل متعددی برای خوب بودن این تغییر وجود دارد. پیاده‌سازی Chrome از initTouchEvent به هیچ وجه با API initTouchEvent Safari سازگار نبود و با Firefox در اندروید متفاوت بود. و در نهایت، استفاده از سازنده TouchEvent بسیار ساده تر است.

به این دلایل، ما تصمیم گرفتیم به جای حفظ یک API که نه مشخص است و نه با تنها پیاده سازی دیگر سازگار است، از مشخصات پیروی کنیم. توسعه دهندگانی که به جایگزینی نیاز دارند باید از سازنده TouchEvent استفاده کنند.

از آنجایی که پیاده‌سازی‌های iOS و Android/Chrome در initTouchEvent API بسیار متفاوت بودند، سایت‌ها اغلب کدهایی در امتداد خطوط (که اغلب فایرفاکس را فراموش می‌کنند) دارند.

    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 قدیمی‌تر در اندروید وجود خواهند داشت که همچنان باید از API قدیمی‌تر پشتیبانی کنید.

برای مدیریت صحیح TouchEvent در وب، باید کد خود را برای پشتیبانی از فایرفاکس، 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.KeyDidentifier حذف شده

TL;DR: ویژگی keyboardEvent.keyIdentifier که کمی پشتیبانی می شود به نفع ویژگی KeyboardEvent.key مبتنی بر استاندارد حذف می شود.

قصد حذف | ردیاب Chromestatus | اشکال کروم

ویژگی keyboardEvent.keyIdentifier به طور خلاصه بخشی از مشخصات W3C در سال‌های 2009 و 2010 بود. با این حال، این ویژگی تنها در WebKit پیاده‌سازی شد.

برنامه‌نویسانی که نیاز به جایگزینی این ویژگی دارند، می‌توانند از ویژگی KeyboardEvent.key مبتنی بر استاندارد یا ویژگی KeyboardEvent.code (همانطور که در مقاله‌ای که بهار گذشته انجام دادیم توضیح داده شد) استفاده کنند. اولی گسترده ترین پایه پیاده سازی را دارد و در تمام مرورگرهای دسکتاپ اصلی به جز سافاری پشتیبانی می شود. نسخه بعدی در حال حاضر در کروم، فایرفاکس و اپرا پشتیبانی می شود. هدف از حذف این ویژگی، پذیرش ویژگی KeyboardEvent.key است. هیچ سخنی از اپل مبنی بر اینکه آیا از این پشتیبانی خواهد کرد یا خیر وجود ندارد. اما ویژگی‌های KeyboardEvent.keyCode و KeyboardEvent.charCode منسوخ شده (اما هنوز از Chrome حذف نشده‌اند) همچنان در Safari در دسترس هستند.

رویداد و ویژگی پایان یافته MediaStream و ویژگی یکپارچه را حذف کنید

TL;DR: رویداد و ویژگی ended و کنترل کننده رویداد onended حذف می شوند زیرا از مشخصات ضبط رسانه و جریان ها حذف شده اند.

قصد حذف | ردیاب Chromestatus | اشکال کروم

نه رویداد ended و نه کنترل کننده رویداد onended برای حدود سه سال بخشی از مشخصات WebRTC نبوده اند. توسعه دهندگانی که می خواهند رویدادها را تماشا کنند باید از MediaStreamTracks به جای MediaStreams استفاده کنند.

svgsvgelement.viewport

این پیاده سازی از سال 2012 در کروم کار نمی کند. این ویژگی به هیچ وجه در مرورگرهای دیگر وجود ندارد و از مشخصات حذف شده است. به این دلایل ملک در حال منسوخ شدن است. حذف در Chrome 55 پیش بینی شده است.

قصد حذف | ردیاب Chromestatus | اشکال کروم

svgviewelement.viewtarget

ویژگی SVGViewElement.viewTarget بخشی از مشخصات SVG2.0 نیست و میزان استفاده از آن کم است یا وجود ندارد. این ویژگی در Chrome 54 منسوخ شده است. در Chrome 56 حذف پیش بینی می شود.

قصد حذف | ردیاب Chromestatus | اشکال کروم

SVGZoomEvent را حذف کنید

SVGZoomEvent بخشی از مشخصات SVG2.0 نیست و در Chromium کار نمی کند. با وجود این، هنوز ویژگی قابل تشخیص است، که منجر به سردرگمی احتمالی توسط توسعه دهندگان می شود. حذف خواهد شد.

قصد حذف | ردیاب Chromestatus | اشکال کروم