ক্রোম 50 এ API অবচয় এবং অপসারণ

Chrome-এর প্রায় প্রতিটি সংস্করণে আমরা পণ্য, এর কার্যকারিতা এবং ওয়েব প্ল্যাটফর্মের সক্ষমতাগুলিতে উল্লেখযোগ্য সংখ্যক আপডেট এবং উন্নতি দেখতে পাই।

Chrome 50-এ (আনুমানিক বিটা তারিখ: মার্চ 10 থেকে 17) Chrome-এ বেশ কিছু পরিবর্তন রয়েছে। এই তালিকা যে কোনো সময় পরিবর্তন সাপেক্ষে.

AppCache অনিরাপদ প্রেক্ষাপটে অবহেলিত

TL;DR : ক্রস-সাইট স্ক্রিপ্টিং বাধাগ্রস্ত করার জন্য, আমরা অনিরাপদ উত্সের জন্য AppCache অবমূল্যায়ন করছি। আমরা আশা করি যে Chrome 52-এ এটি শুধুমাত্র HTTPS-এর মাধ্যমে সামগ্রী পরিবেশনকারী অরিজিনগুলিতে কাজ করবে৷

অপসারণ করার অভিপ্রায় | Chromestatus ট্র্যাকার | ক্রোমিয়াম বাগ

AppCache হল একটি বৈশিষ্ট্য যা অফলাইন এবং একটি মূলে অবিরাম অ্যাক্সেসের অনুমতি দেয়, যা ক্রস-সাইট স্ক্রিপ্টিং আক্রমণের জন্য একটি শক্তিশালী বিশেষাধিকার বৃদ্ধি। অনিরাপদ উত্স থেকে শক্তিশালী বৈশিষ্ট্যগুলি সরানোর একটি বৃহত্তর প্রচেষ্টার অংশ হিসাবে৷

Chrome এই আক্রমণ ভেক্টরটিকে শুধুমাত্র HTTPS-এ অনুমতি দিয়ে সরিয়ে দিচ্ছে। আমরা Chrome 50-এ HTTP সমর্থনকে অবমূল্যায়ন করছি এবং Chrome 52-এ এটি সম্পূর্ণরূপে মুছে ফেলার আশা করছি।

Document.defaultCharset সরানো হয়েছে

TL;DR : document.defaultCharset বিশেষ সম্মতি উন্নত করতে সরানো হয়েছে।

অপসারণ করার অভিপ্রায় | Chromestatus ট্র্যাকার | CRBug সমস্যা

document.defaultCharset , Chrome 49-এ বঞ্চিত, হল একটি শুধুমাত্র-পঠনযোগ্য সম্পত্তি যা ব্যবহারকারীর আঞ্চলিক সেটিংসের উপর ভিত্তি করে ব্যবহারকারীর সিস্টেমের ডিফল্ট অক্ষর এনকোডিং প্রদান করে৷ ব্রাউজার যেভাবে HTTP প্রতিক্রিয়ায় বা পৃষ্ঠায় এমবেড করা মেটা ট্যাগে অক্ষর এনকোডিং তথ্য ব্যবহার করে তার কারণে এই মান বজায় রাখার জন্য এটি কার্যকর বলে পাওয়া যায়নি।

পরিবর্তে, HTTP হেডারে উল্লেখিত প্রথম মান পেতে document.characterSet ব্যবহার করুন। যদি এটি উপস্থিত না থাকে তবে আপনি <meta> উপাদানের charset বৈশিষ্ট্যে নির্দিষ্ট মানটি পাবেন (উদাহরণস্বরূপ, <meta charset="utf-8"> )। পরিশেষে যদি এর কোনোটিই পাওয়া না যায় তাহলে document.characterSet হবে ব্যবহারকারীর সিস্টেম সেটিং।

আপনি এই গিথুব ইস্যুতে এটি নির্দিষ্ট না করার যুক্তি সম্পর্কে আরও আলোচনা পড়তে পারেন

TL;DR : HTMLLinkElement এর rel অ্যাট্রিবিউটের জন্য subresource মানের জন্য সমর্থন সরান।

অপসারণ করার অভিপ্রায় | Chromestatus ট্র্যাকার | ক্রোমিয়াম বাগ

<link>-এ subresource অ্যাট্রিবিউটের উদ্দেশ্য ছিল ব্রাউজারের নিষ্ক্রিয় সময়ে একটি রিসোর্স প্রিফেচ করা। একটি ব্রাউজার একটি পৃষ্ঠা ডাউনলোড করার পরে, এটি অন্যান্য পৃষ্ঠাগুলির মতো সংস্থানগুলিকে আগে থেকে ডাউনলোড করতে পারে যাতে ব্যবহারকারীদের দ্বারা অনুরোধ করা হলে সেগুলি ব্রাউজার ক্যাশে থেকে পুনরুদ্ধার করা যায়।

subresource অ্যাট্রিবিউটটি বেশ কয়েকটি সমস্যায় ভুগছে। প্রথমত, এটি কখনই উদ্দেশ্য অনুযায়ী কাজ করেনি। উল্লেখিত সম্পদ কম অগ্রাধিকার সঙ্গে ডাউনলোড করা হয়েছে. ক্রোম ছাড়া অন্য কোনো ব্রাউজারে অ্যাট্রিবিউটটি প্রয়োগ করা হয়নি। Chrome বাস্তবায়নে একটি বাগ ছিল যার কারণে সংস্থানগুলি দুবার ডাউনলোড করা হয়েছিল৷

কনটেন্ট প্রিলোড করার মাধ্যমে ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে চাইছেন এমন ডেভেলপারদের কাছে অনেকগুলি বিকল্প রয়েছে, যার মধ্যে সবচেয়ে কাস্টমাইজযোগ্য হল প্রিক্যাচিং এবং ক্যাশে API-এর সুবিধা নিতে একজন পরিষেবা কর্মী তৈরি করা। অতিরিক্ত সমাধানগুলির মধ্যে preconnect , prefetch , preload , prerender সহ rel অ্যাট্রিবিউটের অন্যান্য মান অন্তর্ভুক্ত রয়েছে। এই বিকল্পগুলির মধ্যে কিছু পরীক্ষামূলক এবং ব্যাপকভাবে সমর্থিত নাও হতে পারে৷

অনিরাপদ 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 ট্র্যাকার | ক্রোমিয়াম বাগ

ক্রোম 49-এ আমরা একটি সতর্কতা যোগ করেছি যদি আপনি একটি ত্রুটি হ্যান্ডলার সরবরাহ না করে setLocalDescription() বা setRemoteDescription() কল করেন। ক্রোম 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 এবং totalSize সমর্থন করার জন্য বিদ্যমান ছিল। 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 ট্র্যাকার | ক্রোমিয়াম বাগ

Chrome 42-এ, আমরা এনক্রিপ্ট করা মিডিয়া এক্সটেনশনগুলির একটি স্পেসিফিকেশন-ভিত্তিক , আনপ্রিফিক্সড সংস্করণ পাঠিয়েছি। এই APIটি HTMLMediaElement এর সাথে ব্যবহারের জন্য ডিজিটাল রাইটস ম্যানেজমেন্ট সিস্টেমগুলি আবিষ্কার করতে, নির্বাচন করতে এবং ইন্টারঅ্যাক্ট করতে ব্যবহৃত হয়৷

সেটা প্রায় এক বছর আগের কথা। এবং যেহেতু আনপ্রিফিক্সড সংস্করণে প্রিফিক্সড সংস্করণের চেয়ে বেশি ক্ষমতা রয়েছে, তাই API এর প্রিফিক্সড সংস্করণটি সরিয়ে ফেলার সময় এসেছে।

SVGElement.offset বৈশিষ্ট্যগুলির জন্য সমর্থন সরান৷

TL;DR : SVGElement-এর জন্য অফসেট বৈশিষ্ট্যগুলি HTMLElement এ আরও ব্যাপকভাবে-সমর্থিত বৈশিষ্ট্যগুলির পক্ষে বাদ দেওয়া হয়েছে৷

অপসারণ করার অভিপ্রায় | Chromestatus ট্র্যাকার | ক্রোমিয়াম বাগ

অফসেট বৈশিষ্ট্যগুলি দীর্ঘদিন ধরে HTMLElement এবং SVGElement উভয় দ্বারা সমর্থিত হয়েছে; যাইহোক, Gecko এবং Edge শুধুমাত্র HTMLElement এ তাদের সমর্থন করে। ব্রাউজারগুলির মধ্যে সামঞ্জস্যতা উন্নত করার জন্য এই বৈশিষ্ট্যগুলি Chrome 48-এ বাতিল করা হয়েছিল এবং এখন সরানো হচ্ছে৷

যদিও সমতুল্য বৈশিষ্ট্যগুলি HTMLElement এর অংশ, বিকাশকারীরা বিকল্প খুঁজছেন তারা getBoundingClientRect() ব্যবহার করতে পারেন