ক্রোম 49-এ API অপসারণ এবং অপসারণ

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

ক্রোম 49-এ (বিটা ফেব্রুয়ারী 2রা, 2016। আনুমানিক স্থিতিশীল তারিখ: মার্চ 2016) Chrome-এ বেশ কিছু পরিবর্তন রয়েছে

getComputedStyle(e)cssX-এ "css" উপসর্গের ব্যবহার বন্ধ করা হয়েছে

TL;DR : getComputedStyle(e) -এ "css" উপসর্গের ব্যবহার বাতিল করা হয়েছে কারণ এটি আনুষ্ঠানিক বৈশিষ্ট্যের অংশ ছিল না।

getComputedStyle একটি মহান সামান্য ফাংশন. এটি DOM উপাদানের শৈলীর সমস্ত CSS মান ফিরিয়ে দেবে কারণ সেগুলি রেন্ডারিং ইঞ্জিন দ্বারা গণনা করা হয়েছে। সুতরাং উদাহরণস্বরূপ, আপনি getComputedStyle(_someElement_).height চালাতে পারেন এবং এটি 224.1px দিতে পারে কারণ এটি বর্তমানে প্রদর্শিত উপাদানটির উচ্চতা।

এটি বেশ একটি সহজ API বলে মনে হচ্ছে। তাহলে আমরা কি পরিবর্তন করছি?

ক্রোমের রেন্ডারিং ইঞ্জিন ব্লিঙ্কে পরিবর্তিত হওয়ার আগে, এটি ওয়েবকিট দ্বারা চালিত ছিল এবং এটি আপনাকে একটি সম্পত্তির শুরুতে "css" উপসর্গ দিতে দেয়। উদাহরণস্বরূপ getComputedStyle(e).cssHeight এর পরিবর্তে getComputedStyle(e).height । উভয়ই একই ডেটা ফেরত দেবে যেমন তারা একই অন্তর্নিহিত মানগুলিতে ম্যাপ করেছে, কিন্তু এটি "css" উপসর্গের ব্যবহার যা অ-মানক এবং অবমূল্যায়িত এবং সরানো হয়েছে।

দ্রষ্টব্য - cssFloat একটি আদর্শ সম্পত্তি এবং এই অবচয় দ্বারা প্রভাবিত হয় না।

আপনি যদি Chrome 49-এ এইভাবে কোনও সম্পত্তি অ্যাক্সেস করেন তবে এটি undefined ফিরে আসবে এবং আপনাকে আপনার কোড ঠিক করতে হবে।

initTouchEvent ব্যবহার বন্ধ করা হয়েছে

TL;DR : initTouchEvent স্পেক কমপ্লায়েন্স উন্নত করতে TouchEvent constructor পক্ষে বাতিল করা হয়েছে এবং Chrome 54 এ সম্পূর্ণভাবে সরানো হবে।

Chromestatus ট্র্যাকার CRBug সমস্যা সরানোর অভিপ্রায়৷

দীর্ঘদিন ধরে আপনি initTouchEvent API ব্যবহার করে ক্রোমে সিন্থেটিক টাচ ইভেন্ট তৈরি করতে সক্ষম হয়েছেন, এগুলি প্রায়শই আপনার সাইটে কিছু UI পরীক্ষা বা স্বয়ংক্রিয় করার জন্য টাচ ইভেন্টগুলি অনুকরণ করতে ব্যবহৃত হয়। ক্রোম 49-এ আমরা এই এপিআইকে অবমূল্যায়ন করেছি এবং এটিকে Chrome 53-এ সম্পূর্ণরূপে অপসারণের অভিপ্রায়ে নিম্নলিখিত সতর্কতা প্রদর্শন করব।

'TouchEvent.initTouchEvent' বন্ধ করা হয়েছে এবং সেপ্টেম্বর 2016-এর কাছাকাছি M53 এ সরিয়ে দেওয়া হবে। এর পরিবর্তে দয়া করে TouchEvent কনস্ট্রাক্টর ব্যবহার করুন।
'TouchEvent.initTouchEvent' বন্ধ করা হয়েছে এবং সেপ্টেম্বর 2016-এর কাছাকাছি M53 এ সরিয়ে দেওয়া হবে। এর পরিবর্তে দয়া করে TouchEvent কনস্ট্রাক্টর ব্যবহার করুন। আরও বিস্তারিত জানার জন্য https://www.chromestatus.com/features/5730982598541312 দেখুন।

এই পরিবর্তন ভালো হওয়ার বেশ কিছু কারণ রয়েছে। এটি টাচ ইভেন্ট স্পেকের মধ্যেও নেই। initTouchEvent এর Chrome বাস্তবায়ন Safari-এর initTouchEvent API-এর সাথে মোটেও সামঞ্জস্যপূর্ণ ছিল না এবং Android-এর Firefox-এর থেকে আলাদা ছিল। এবং অবশেষে, TouchEvent কনস্ট্রাক্টর ব্যবহার করা অনেক সহজ।

এটি সিদ্ধান্ত নেওয়া হয়েছিল যে আমরা এমন একটি API বজায় রাখার পরিবর্তে স্পেক অনুসরণ করার লক্ষ্য রাখব যা কেবলমাত্র অন্য বাস্তবায়নের সাথে স্পেসিড বা সামঞ্জস্যপূর্ণ নয়। ফলস্বরূপ আমরা প্রথমে initTouchEvent ফাংশনটি অবমূল্যায়ন করছি এবং তারপরে সরিয়ে দিচ্ছি এবং ডেভেলপারদের TouchEvent কনস্ট্রাক্টর ব্যবহার করতে হবে।

ওয়েবে এই API-এর ব্যবহার রয়েছে কিন্তু আমরা জানি যে এটি তুলনামূলকভাবে কম সংখ্যক সাইট দ্বারা ব্যবহৃত হয় তাই আমরা সাধারণত যত দ্রুত হতে পারি তত দ্রুত এটিকে সরিয়ে দিচ্ছি না। আমরা বিশ্বাস করি যে সাইটগুলি Chrome এর স্বাক্ষরের সংস্করণ পরিচালনা না করার কারণে কিছু ব্যবহার ভেঙে গেছে৷

কারণ initTouchEvent API-এর iOS এবং Android/Chrome প্রয়োগগুলি এতটাই আলাদা ছিল যে আপনার কাছে প্রায়শই কিছু কোড থাকবে (প্রায়শই ফায়ারফক্স ভুলে যাওয়া)

    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" খুঁজছে এবং Android এ Chrome মিলবে এবং এই অবচয়কে আঘাত করবে। যদিও এটি এখনও সরানো যাবে না কারণ অ্যান্ড্রয়েডে কিছু সময়ের জন্য অন্যান্য ওয়েবকিট এবং পুরানো ব্লিঙ্ক ভিত্তিক ব্রাউজার থাকবে যা আপনাকে এখনও পুরানো API সমর্থন করতে হবে।

ওয়েবে TouchEvents সঠিকভাবে পরিচালনা করতে আপনার window অবজেক্টে TouchEvent এর অস্তিত্ব পরীক্ষা করে এবং যদি এটির একটি ইতিবাচক "দৈর্ঘ্য" থাকে (ইঙ্গিত করে যে এটি একটি কনস্ট্রাক্টর যা একটি আর্গুমেন্ট নেয় তা পরীক্ষা করে Firefox, IE Edge এবং Chrome সমর্থন করার জন্য আপনার কোড পরিবর্তন করা উচিত। ) আপনার এটি ব্যবহার করা উচিত।

    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);

RTCPeerConnection পদ্ধতিতে ত্রুটি এবং সফল হ্যান্ডলার প্রয়োজন

TL;DR: WebRTC RTCPeerConnection পদ্ধতি createOffer() এবং createAnswer() এর জন্য এখন একটি ত্রুটি হ্যান্ডলারের পাশাপাশি একটি সফল হ্যান্ডলার প্রয়োজন। পূর্বে শুধুমাত্র সফল হ্যান্ডলার দিয়ে এই পদ্ধতিগুলিকে কল করা সম্ভব ছিল। সেই ব্যবহার অবজ্ঞা করা হয়েছে।

ক্রোম 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 প্রকল্প দ্বারা রক্ষণাবেক্ষণ করা হয়, অ্যাপগুলিকে বিশেষ পরিবর্তন এবং উপসর্গের পার্থক্য থেকে দূরে রাখতে।

Document.defaultCharset অপ্রচলিত

TL;DR : Document.defaultCharset স্পেক কমপ্লায়েন্স উন্নত করতে অবচয় করা হয়েছে।

Chromestatus ট্র্যাকার CRBug সমস্যা সরানোর অভিপ্রায়৷

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

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

Gecko এই সম্পত্তিটিকে সমর্থন করেনি এবং এটি পরিষ্কারভাবে নির্দিষ্ট করা হয়নি তাই এই সম্পত্তিটি ক্রোম 49 (জানুয়ারী 2016-এ বিটা) এর ব্লিঙ্ক থেকে অবমূল্যায়িত হবে। Chrome 50 এ সম্পত্তি অপসারণ না হওয়া পর্যন্ত নিম্নলিখিত সতর্কতাটি আপনার কনসোলে উপস্থিত হবে:

'Document.defaultCharset' বন্ধ করা হয়েছে এবং এপ্রিল 2016-এর কাছাকাছি M50-এ সরিয়ে দেওয়া হবে।
'Document.defaultCharset' বন্ধ করা হয়েছে এবং এপ্রিল 2016-এর কাছাকাছি সময়ে M50 এ সরানো হবে। আরও বিশদ বিবরণের জন্য https://www.chromestatus.com/features/6217124578066432 দেখুন।

এটি নির্দিষ্ট না করার যুক্তি সম্পর্কে আরও আলোচনা github https://github.com/whatwg/dom/issues/58 এ পড়া যেতে পারে

getStorageUpdates() সরানো হয়েছে

TL;DR : Navigator.getStorageUpdates() সরানো হয়েছে কারণ এটি আর ন্যাভিগেটর স্পেকের মধ্যে নেই।

Chromestatus ট্র্যাকার CRBug সমস্যা সরানোর অভিপ্রায়৷

যদি এটি কাউকে প্রভাবিত করে তবে আমি আমার টুপি খাব। getStorageUpdates() খুব কমই (যদি আদৌ) ওয়েবে ব্যবহার করা হয়েছে।

HTML5 স্পেকের (খুব পুরানো সংস্করণ) উদ্ধৃত করতে:

সুন্দর সুন্দর শোনাচ্ছে? স্পেক এমনকি "whence" শব্দটি ব্যবহার করে (যা ঘটনা দ্বারা স্পেকের মধ্যে কোথা থেকে একমাত্র উদাহরণ)। নির্দিষ্ট স্তরে একটি StorageMutex ছিল যা localStorage এবং কুকিজের মতো ব্লকিং স্টোরেজের অ্যাক্সেস নিয়ন্ত্রণ করে এবং এই API সেই মিউটেক্সকে মুক্ত করতে সাহায্য করবে যাতে অন্যান্য স্ক্রিপ্টগুলি এই StorageMutex দ্বারা ব্লক করা না হয়। কিন্তু এটি কখনই বাস্তবায়িত হয়নি, এটি IE বা Gecko তে সমর্থিত নয় এবং WebKit এর (এবং এইভাবে ব্লিঙ্কের) বাস্তবায়ন একটি নো-অপ হয়েছে।

এটি বেশ কিছু সময়ের জন্য চশমা থেকে সরানো হয়েছে এবং ব্লিঙ্ক থেকে সম্পূর্ণরূপে সরানো হয়েছে (দীর্ঘ সময় ধরে এটি একটি নো-অপ ছিল এবং বলা হলেও কিছুই করেনি)।

অসম্ভাব্য ইভেন্টে আপনার কাছে navigator.getStorageUpdates() নামে একটি কোড ছিল তাহলে আপনাকে কল করার আগে ফাংশনের উপস্থিতি পরীক্ষা করতে হবে।

Object.observe() বাতিল করা হয়েছে

TL;DR : Object.observe() বাতিল করা হয়েছে কারণ এটি আর স্ট্যান্ডার্ডাইজেশন ট্র্যাকে নেই এবং ভবিষ্যতে রিলিজে সরিয়ে দেওয়া হবে।

Chromestatus ট্র্যাকার CRBug সমস্যা সরানোর অভিপ্রায়৷

নভেম্বর 2015 এ ঘোষণা করা হয়েছিল যে TC39 থেকে Object.Observe প্রত্যাহার করা হচ্ছে । এটি Chrome 49 থেকে বাতিল করা হয়েছে এবং আপনি যদি এটি ব্যবহার করার চেষ্টা করেন তবে আপনি কনসোলে নিম্নলিখিত সতর্কতা দেখতে পাবেন:

'Object.observe' বন্ধ করা হয়েছে এবং এপ্রিল 2016-এর কাছাকাছি M50-এ সরিয়ে দেওয়া হবে।
'Object.observe' বন্ধ করা হয়েছে এবং এপ্রিল 2016-এর কাছাকাছি M50-এ সরিয়ে দেওয়া হবে। আরও বিশদ বিবরণের জন্য https://www.chromestatus.com/features/6147094632988672 দেখুন।

অনেক ডেভেলপার এই APIটি পছন্দ করেছেন এবং আপনি যদি এটি নিয়ে পরীক্ষা-নিরীক্ষা করে থাকেন এবং এখন একটি ট্রানজিশন পাথ খুঁজছেন, তাহলে একটি পলিফিল যেমন MaxArt2501/object-observe বা পলিমার/observe-js এর মতো একটি র্যাপার লাইব্রেরি ব্যবহার করার কথা বিবেচনা করুন।