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

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

در Chrome 50 (تاریخ بتای تخمینی: 10 تا 17 مارس) تعدادی تغییرات در Chrome وجود دارد. این لیست در هر زمان ممکن است تغییر کند.

AppCache در زمینه های ناامن منسوخ شد

TL;DR : برای جلوگیری از اسکریپت‌های متقابل سایت، AppCache را در منابع ناامن منسوخ می‌کنیم. ما انتظار داریم که در Chrome 52 فقط روی مبدا که محتوا را از طریق HTTPS ارائه می‌کند کار کند.

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

AppCache یک ویژگی است که امکان دسترسی آفلاین و دائمی به یک مبدا را فراهم می کند، که یک افزایش امتیاز قدرتمند برای یک حمله اسکریپت بین سایتی است. به عنوان بخشی از یک تلاش بزرگتر برای حذف ویژگی های قدرتمند در مبداهای ناامن .

کروم این بردار حمله را فقط با اجازه دادن به آن از طریق HTTPS حذف می کند. ما پشتیبانی HTTP را در Chrome 50 منسوخ می‌کنیم و انتظار داریم آن را به طور کامل در Chrome 52 حذف کنیم.

Document.defaultCharset حذف شده است

TL;DR : document.defaultCharset برای بهبود انطباق با مشخصات حذف شده است.

قصد حذف | ردیاب Chromestatus | مسئله CRBug

document.defaultCharset ، که در Chrome 49 منسوخ شده است، یک ویژگی فقط خواندنی است که رمزگذاری کاراکترهای پیش‌فرض سیستم کاربر را بر اساس تنظیمات منطقه‌ای آن‌ها برمی‌گرداند. به دلیل روشی که مرورگرها از اطلاعات رمزگذاری کاراکتر در پاسخ HTTP یا در متا تگ تعبیه شده در صفحه استفاده می کنند، حفظ این مقدار مفید نیست.

در عوض، از document.characterSet برای دریافت اولین مقدار مشخص شده در هدر HTTP استفاده کنید. اگر وجود نداشته باشد، مقدار مشخص شده در ویژگی charset عنصر <meta> را دریافت خواهید کرد (به عنوان مثال، <meta charset="utf-8"> ). در نهایت اگر هیچ یک از آنها در دسترس نباشد document.characterSet تنظیمات سیستم کاربر خواهد بود.

شما می توانید بحث بیشتر در مورد دلیل عدم ذکر این موضوع را در این شماره github بخوانید

TL;DR : پشتیبانی از مقدار subresource را برای ویژگی rel از HTMLLinkElement حذف کنید.

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

هدف ویژگی subresource در <link> این بود که یک منبع را در زمان بیکاری مرورگر واکشی کند. پس از اینکه مرورگر یک صفحه را دانلود کرد، می‌تواند منابعی مانند صفحات دیگر را از قبل دانلود کند تا در صورت درخواست کاربران، به سادگی از حافظه پنهان مرورگر بازیابی شوند.

ویژگی subresource از تعدادی مشکلات رنج می برد. اولاً، هرگز آنطور که در نظر گرفته شده بود کار نکرد. منابع ارجاع شده با اولویت پایین دانلود شدند. این ویژگی هرگز در هیچ مرورگری غیر از Chrome اجرا نشد. پیاده سازی کروم دارای یک اشکال بود که باعث شد منابع دو بار دانلود شوند.

توسعه دهندگانی که به دنبال بهبود تجربه کاربر از طریق بارگذاری از قبل محتوا هستند، تعدادی گزینه دارند که قابل تنظیم ترین آنها ایجاد یک سرویس دهنده برای استفاده از پیش کش و API Caches است. راه حل های اضافی شامل مقادیر دیگری برای ویژگی rel از جمله preconnect ، prefetch ، preload ، prerender . برخی از این گزینه ها آزمایشی هستند و ممکن است به طور گسترده پشتیبانی نشوند.

نسخه ناامن TLS را حذف کنید

TL;DR : مکانیزمی را برای وادار کردن سرورها به بازگرداندن داده ها با استفاده از نسخه های کمتر یا غیر ایمن TLS حذف کنید.

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

امنیت لایه حمل و نقل (TLS) از مکانیزمی برای مذاکره نسخه‌ها پشتیبانی می‌کند که امکان معرفی نسخه‌های جدید TLS را بدون اختلال در سازگاری فراهم می‌کند. برخی از سرورها این را به گونه ای پیاده سازی کردند که مرورگرها مجبور شدند از نقاط پایانی ناامن به عنوان یک بازگشت استفاده کنند. به همین دلیل، مهاجمان می‌توانند هر وب‌سایتی را مجبور کنند، نه فقط آن‌هایی که پیکربندی نادرست دارند، برای نسخه‌های ضعیف‌تر TLS مذاکره کنند.

سایت های آسیب دیده نمی توانند به ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION متصل شوند. مدیران باید اطمینان حاصل کنند که نرم افزار سرور آنها به روز است. اگر هنوز حل نشده است، با فروشنده نرم افزار سرور تماس بگیرید تا ببینید آیا راه حلی وجود دارد یا خیر.

KeyboardEvent.prototype.keyLocation را حذف کنید

TL;DR : نام مستعار غیر ضروری برای ویژگی Keyboard.prototype.location را حذف کنید.

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

این ویژگی صرفاً نام مستعار ویژگی Keyboard.prototype.location است که امکان ابهام‌زدایی بین کلیدهایی را که در چندین مکان روی صفحه‌کلید قرار دارند، می‌دهد. به عنوان مثال، هر دو ویژگی به توسعه دهندگان اجازه می دهد تا بین دو کلید Enter در یک صفحه کلید توسعه یافته تمایز قائل شوند.

کنترل‌کننده‌های خطا و موفقیت در روش‌های RTCPeerConnection مورد نیاز است

TL;DR : روش‌های WebRTC RTCPeerConnection createOffer() و createAnswer() اکنون به یک کنترل‌کننده خطا و همچنین یک کنترل‌کننده موفقیت نیاز دارند. پیش از این، فراخوانی این روش ها تنها با یک کنترل کننده موفقیت امکان پذیر بود. این استفاده منسوخ شده است.

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

در Chrome 49، اگر با setLocalDescription() یا setRemoteDescription() بدون ارائه یک کنترل کننده خطا، هشداری اضافه کردیم. آرگومان کنترل کننده خطا از Chrome 50 اجباری است.

این بخشی از باز کردن راه برای معرفی وعده‌ها در این روش‌ها است، همانطور که توسط مشخصات WebRTC مورد نیاز است.

در اینجا یک مثال از نسخه ی نمایشی 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 | اشکال کروم

این رویداد برای پشتیبانی از position ویژگی های سازگاری Gecko و totalSize وجود داشت. پشتیبانی از هر سه در موزیلا 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 | اشکال کروم

در Chrome 42، یک نسخه بدون پیشوند و مبتنی بر مشخصات از برنامه‌های افزودنی رسانه رمزگذاری‌شده ارسال کردیم. این API برای کشف، انتخاب و تعامل با سیستم های مدیریت حقوق دیجیتال برای استفاده با HTMLMediaElement استفاده می شود.

این نزدیک به یک سال پیش بود. و از آنجایی که نسخه بدون پیشوند دارای قابلیت های بیشتری نسبت به نسخه پیشوندی است، زمان حذف نسخه پیشوندی API فرا رسیده است.

پشتیبانی از ویژگی های SVGElement.offset را حذف کنید

TL;DR : ویژگی های افست برای SVGElement به نفع ویژگی های با پشتیبانی گسترده تر در HTMLElement حذف شده اند.

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

ویژگی های افست مدت هاست که هم توسط HTMLElement و هم SVGElement پشتیبانی می شود. با این حال، Gecko و Edge فقط آنها را در HTMLElement پشتیبانی می کنند. برای بهبود سازگاری بین مرورگرها، این ویژگی‌ها در Chrome 48 منسوخ شدند و اکنون حذف می‌شوند.

اگرچه ویژگی های معادل بخشی از HTMLElement هستند، توسعه دهندگانی که به دنبال جایگزینی هستند می توانند از getBoundingClientRect() نیز استفاده کنند.