ডিক্লারেটিভ লিঙ্ক ক্যাপচারিং বলতে কী বোঝায়?
ওয়েবে লিঙ্কে ক্লিক করা কখনও কখনও বেশ সুখকর হতে পারে। উদাহরণস্বরূপ, মোবাইল ডিভাইসে ইউটিউবের কোনো ওয়েব পেজ লিঙ্কে ক্লিক করলে, যদি ইনস্টল করা থাকে, তবে ইউটিউবের আইওএস বা অ্যান্ড্রয়েড অ্যাপটি খুলে যায়। কিন্তু যখন আপনি ডেস্কটপ কম্পিউটারে ইউটিউব পিডব্লিউএ (PWA) ইনস্টল করে কোনো লিঙ্কে ক্লিক করেন, তখন সেটি একটি ব্রাউজার ট্যাবে খোলে।
কিন্তু বিষয়টি আরও জটিল হয়ে ওঠে। কী হবে যদি লিঙ্কটি কোনো ওয়েবসাইটে না এসে, গুগলের কোনো চ্যাট অ্যাপে পাওয়া একটি চ্যাট মেসেজে আসে? ডেস্কটপ অপারেটিং সিস্টেমে, যেখানে আলাদা অ্যাপ উইন্ডোর ধারণা রয়েছে, সেখানে অ্যাপটি যদি আগে থেকেই খোলা থাকে, তাহলে কি প্রতিটি লিঙ্ক ক্লিকের জন্য একটি নতুন উইন্ডো বা ট্যাব তৈরি করা উচিত? ভেবে দেখলে, লিঙ্ক এবং নেভিগেশন ক্যাপচার করার অনেক উপায় আছে, যার মধ্যে নিম্নলিখিতগুলো অন্তর্ভুক্ত, তবে এগুলোর মধ্যেই সীমাবদ্ধ নয়:
- অন্যান্য ওয়েব পেজ থেকে লিঙ্কে ক্লিক করা হয়েছে।
- অপারেটিং সিস্টেমের একটি প্ল্যাটফর্ম-নির্দিষ্ট অ্যাপ থেকে ইউআরএলটি চালু হয়।
- অ্যাপ শর্টকাটস এপিআই থেকে উদ্ভূত নেভিগেশন।
- যেসব লিঙ্ক ইউআরএল প্রোটোকল হ্যান্ডলারের মধ্য দিয়ে যায়।
- ফাইল হ্যান্ডলার দ্বারা সৃষ্ট নেভিগেশন।
- শেয়ার টার্গেট এপিআই (Share Target API) দ্বারা সৃষ্ট নেভিগেশন।
- …এবং অন্যান্যরা।
ডিক্লারেটিভ লিঙ্ক ক্যাপচারিং হলো "capture_links" নামক একটি ওয়েব অ্যাপ ম্যানিফেস্ট প্রপার্টির জন্য একটি প্রস্তাবনা, যা ডেভেলপারদেরকে ঘোষণামূলকভাবে নির্ধারণ করতে দেয় যে, অ্যাপ্লিকেশনটির নেভিগেশন স্কোপের বাইরের কোনো প্রেক্ষাপট থেকে ব্রাউজারকে যখন অ্যাপ্লিকেশনটির নেভিগেশন স্কোপের মধ্যে থাকা কোনো ইউআরএল-এ নেভিগেট করতে বলা হয়, তখন কী ঘটবে। এই প্রস্তাবনাটি প্রযোজ্য হবে না যদি ব্যবহারকারী ইতিমধ্যেই নেভিগেশন স্কোপের মধ্যে থাকেন (উদাহরণস্বরূপ, যদি ব্যবহারকারীর স্কোপের মধ্যে একটি ব্রাউজার ট্যাব খোলা থাকে এবং তিনি একটি অভ্যন্তরীণ লিঙ্কে ক্লিক করেন)।
কিছু বিশেষ পরিস্থিতিতে, যেমন কোনো লিঙ্কে মিডল-ক্লিক করলে (অথবা রাইট-ক্লিক করে তারপর "নতুন ট্যাবে খুলুন" বিকল্পটি বেছে নিলে), সাধারণত লিঙ্ক ক্যাপচারিং আচরণটি সক্রিয় হয় না। কোনো লিঙ্কের target=_self বা target=_blank কিনা, তাতে কিছু যায় আসে না, ফলে ব্রাউজার উইন্ডোতে (বা অন্য কোনো PWA-এর উইন্ডোতে) ক্লিক করা লিঙ্কগুলো PWA-তেই খুলে যাবে, এমনকি যদি সেগুলো সাধারণত একই ট্যাবের মধ্যে নেভিগেশন ঘটায়।
প্রস্তাবিত ব্যবহারের ক্ষেত্রসমূহ
যেসব সাইট এই এপিআই ব্যবহার করতে পারে তার উদাহরণ হলো:
- পিডব্লিউএ (PWA) চায় যে, ব্যবহারকারী যখন সেগুলোর কোনো লিঙ্কে ক্লিক করবে, তখন ব্রাউজার ট্যাবের পরিবর্তে একটি উইন্ডো খুলবে। ডেস্কটপ পরিবেশে, প্রায়শই একই সময়ে একাধিক অ্যাপ্লিকেশন উইন্ডো খোলা রাখা যুক্তিযুক্ত।
- সিঙ্গেল-উইন্ডো পিডব্লিউএ, যেখানে ডেভেলপাররা যেকোনো সময়ে অ্যাপটির কেবল একটি ইনস্ট্যান্স খোলা রাখতে পছন্দ করেন এবং নতুন নেভিগেশনগুলো বিদ্যমান ইনস্ট্যান্সটিকেই ফোকাস করে। এর উপ-ব্যবহারের ক্ষেত্রগুলোর মধ্যে রয়েছে:
- যেসব অ্যাপের ক্ষেত্রে কেবল একটি ইনস্ট্যান্স চালু রাখাই যুক্তিযুক্ত (যেমন, একটি মিউজিক প্লেয়ার, একটি গেম)।
- যেসব অ্যাপে একটিমাত্র ইনস্ট্যান্সের মধ্যেই একাধিক ডকুমেন্ট পরিচালনার সুবিধা থাকে (যেমন, HTML-এ বাস্তবায়িত ট্যাব স্ট্রিপ)।
about://flags দিয়ে সক্রিয় করুন
অরিজিন ট্রায়াল টোকেন ছাড়াই স্থানীয়ভাবে ডিক্লারেটিভ লিঙ্ক ক্যাপচারিং নিয়ে পরীক্ষা করার জন্য, about://flags এ #enable-desktop-pwas-link-capturing ফ্ল্যাগটি সক্রিয় করুন।
ডিক্লারেটিভ লিঙ্ক ক্যাপচারিং কীভাবে ব্যবহার করবেন?
ডেভেলপাররা অতিরিক্ত ওয়েব অ্যাপ ম্যানিফেস্ট ফিল্ড "capture_links" ব্যবহার করে ঘোষণামূলকভাবে নির্ধারণ করতে পারেন যে লিঙ্কগুলি কীভাবে ক্যাপচার করা হবে। এর মান হিসেবে একটি স্ট্রিং বা স্ট্রিংগুলির একটি অ্যারে নেওয়া হয়। যদি স্ট্রিংগুলির একটি অ্যারে দেওয়া হয়, তাহলে ইউজার এজেন্ট তালিকার প্রথম সমর্থিত আইটেমটি বেছে নেয়, যার ডিফল্ট মান "none" থাকে।
নিম্নলিখিত মানগুলি সমর্থিত:
-
"none"(ডিফল্ট): কোনো লিঙ্ক ক্যাপচার করা হবে না; এই PWA স্কোপে নিয়ে আসা লিঙ্কগুলিতে ক্লিক করলে কোনো PWA উইন্ডো না খুলেই স্বাভাবিকভাবে নেভিগেট করা যাবে। -
"new-client": প্রতিটি ক্লিক করা লিঙ্ক সেই URL-এ একটি নতুন PWA উইন্ডো খোলে। "existing-client-navigate": ক্লিক করা লিঙ্কটি একটি বিদ্যমান PWA উইন্ডোতে খোলে, যদি সেরকম কোনো উইন্ডো উপলব্ধ থাকে, অথবা না থাকলে একটি নতুন উইন্ডোতে খোলে। যদি একাধিক PWA উইন্ডো বিদ্যমান থাকে, তবে ব্রাউজারটি ইচ্ছামতো যেকোনো একটি বেছে নিতে পারে। কোনো উইন্ডো খোলা না থাকলে এটি"new-client"এর মতো আচরণ করে। এই অপশনটি সেইসব "রিড-অনলি" সাইটের জন্য সবচেয়ে ভালো কাজ করে যেগুলো ব্যবহারকারীর ডেটা মেমরিতে ধরে রাখে না, যেমন মিউজিক প্লেয়ার। যে পেজ থেকে নেভিগেট করে অন্য পেজে যাওয়া হচ্ছে, সেটিতে যদি একটিbeforeunloadইভেন্ট থাকে, তাহলে নেভিগেশন সম্পূর্ণ হওয়ার আগেই ব্যবহারকারী প্রম্পটটি দেখতে পাবেন।
ডেমো
ডিক্লারেটিভ লিঙ্ক ক্যাপচারিং-এর ডেমোটি আসলে দুটি ডেমো নিয়ে গঠিত, যেগুলো একে অপরের সাথে মিথস্ক্রিয়া করে:
- সাইট ১
- সাইট ২
স্ক্রিনকাস্টটি দেখায় যে এই দুটি কীভাবে একে অপরের সাথে কাজ করে। তারা দুটি ভিন্ন আচরণ প্রদর্শন করে, "new-client" এবং "existing-client-navigate" । আচরণের পার্থক্য দেখতে, অ্যাপ দুটিকে বিভিন্ন অবস্থায়—একটি ট্যাবে চালিয়ে অথবা একটি ইনস্টল করা PWA হিসাবে—পরীক্ষা করে দেখতে ভুলবেন না।
নিরাপত্তা এবং অনুমতি
ক্রোমিয়াম টিম " Controlling Access to Powerful Web Platform Features" -এ সংজ্ঞায়িত মূল নীতিগুলি, যেমন—ব্যবহারকারীর নিয়ন্ত্রণ, স্বচ্ছতা এবং আর্গোনমিক্স, ব্যবহার করে ডিক্লারেটিভ লিঙ্ক ক্যাপচারিং ডিজাইন ও বাস্তবায়ন করেছে। এই এপিআই সাইটগুলিকে নতুন অতিরিক্ত নিয়ন্ত্রণের সুযোগ দেয়। প্রথমত, একটি উইন্ডোতে ইনস্টল করা অ্যাপগুলি স্বয়ংক্রিয়ভাবে খোলার ক্ষমতা। এটি বিদ্যমান UI ব্যবহার করে, কিন্তু সাইটকে এটি স্বয়ংক্রিয়ভাবে চালু করার সুযোগ করে দেয়। দ্বিতীয়ত, একটি বিদ্যমান উইন্ডোকে তার নিজস্ব ডোমেইনে ফোকাস করার এবং ক্লিক করা URL সম্বলিত একটি ইভেন্ট ফায়ার করার ক্ষমতা। এর উদ্দেশ্য হলো, ডিফল্ট HTML নেভিগেশন ফ্লোকে ওভাররাইড করে সাইটকে একটি বিদ্যমান উইন্ডোকে নতুন পৃষ্ঠায় নিয়ে যাওয়ার সুযোগ দেওয়া।
লঞ্চ হ্যান্ডলার এপিআই-তে স্থানান্তরিত করুন
ক্রোমিয়াম ৯৭ এবং এর পূর্ববর্তী সংস্করণগুলোর জন্য ডিক্লারেটিভ লিঙ্ক ক্যাপচারিং এপিআই-এর অরিজিন ট্রায়ালটি ৩০ মার্চ, ২০২২-এ মেয়াদোত্তীর্ণ হয়েছে । ক্রোমিয়াম ৯৮ এবং এর পরবর্তী সংস্করণগুলোতে এটিকে একগুচ্ছ নতুন ফিচার ও এপিআই দ্বারা প্রতিস্থাপন করা হয়েছে, যার মধ্যে ব্যবহারকারী-সক্ষম লিঙ্ক ক্যাপচারিং এবং লঞ্চ হ্যান্ডলার এপিআই অন্তর্ভুক্ত।
লিঙ্ক ক্যাপচারিং
ক্রোমিয়াম ৯৮-এ, স্বয়ংক্রিয় লিঙ্ক ক্যাপচারিং এখন একটি ব্যবহারকারী-নির্বাচিত আচরণ, যা কোনো ওয়েব অ্যাপ ইনস্টল করার সময় অনুমোদন করা হয় না। লিঙ্ক ক্যাপচারিং সক্রিয় করতে, একজন ব্যবহারকারীকে ব্রাউজার থেকে 'ওপেন উইথ' ব্যবহার করে ইনস্টল করা অ্যাপটি চালু করতে হবে এবং 'রিমেম্বার মাই চয়েস' বিকল্পটি বেছে নিতে হবে।

বিকল্পভাবে, ব্যবহারকারীরা অ্যাপ ম্যানেজমেন্ট সেটিংস পেজে একটি নির্দিষ্ট ওয়েব অ্যাপের জন্য লিঙ্ক ক্যাপচারিং চালু বা বন্ধ করতে পারেন।

লিঙ্ক ক্যাপচারিং আপাতত শুধুমাত্র ChromeOS-এর একটি ফিচার; Windows, macOS, এবং Linux-এর জন্য সমর্থন তৈরির কাজ চলছে।
লঞ্চ হ্যান্ডলার এপিআই
ইনকামিং ন্যাভিগেশনের নিয়ন্ত্রণ লঞ্চ হ্যান্ডলার এপিআই-তে স্থানান্তরিত করা হয়েছে, যা ওয়েব অ্যাপগুলিকে বিভিন্ন পরিস্থিতিতে, যেমন লিঙ্ক ক্যাপচারিং, শেয়ার টার্গেট বা ফাইল হ্যান্ডলিং ইত্যাদিতে, অ্যাপটি কীভাবে চালু হবে তা নির্ধারণ করার সুযোগ দেয়। ডিক্লারেটিভ লিঙ্ক ক্যাপচারিং এপিআই থেকে লঞ্চ হ্যান্ডলার এপিআই-তে স্থানান্তরিত করতে:
- লঞ্চ হ্যান্ডলার অরিজিন ট্রায়ালের জন্য আপনার সাইটটি রেজিস্টার করুন এবং অরিজিন ট্রায়াল কী-টি আপনার ওয়েব অ্যাপে রাখুন।
আপনার সাইটের ম্যানিফেস্টে একটি
"launch_handler"এন্ট্রি যোগ করুন।-
"capture_links": "new-client"ব্যবহার করতে, যোগ করুন:"launch_handler": { "route_to": "new-client" }। -
"capture_links": "existing-client-navigate"ব্যবহার করতে, যোগ করুন:"launch_handler": { "route_to": "existing-client-navigate" }। -
"capture_links": "existing-client-event"(যা ডিক্লারেটিভ লিঙ্ক ক্যাপচারিং অরিজিন ট্রায়ালে কখনও প্রয়োগ করা হয়নি) ব্যবহার করতে, যোগ করুন:"launch_handler": { "route_to": "existing-client-retain" }। এই বিকল্পটি ব্যবহার করলে, লিঙ্ক নেভিগেশন ক্যাপচার করা হলে আপনার অ্যাপ স্কোপের পেজগুলো আর স্বয়ংক্রিয়ভাবে নেভিগেট করবে না। নেভিগেশন চালু করার জন্য আপনাকে অবশ্যই জাভাস্ক্রিপ্টেwindow.launchQueue.setConsumer()কল করেLaunchParamsহ্যান্ডেল করতে হবে।
-
capture_links ফিল্ড এবং `Declarative Link Capturing` অরিজিন ট্রায়াল রেজিস্ট্রেশন ৩০ মার্চ, ২০২২ পর্যন্ত বৈধ থাকবে। এর ফলে Chromium 97 এবং তার পূর্ববর্তী সংস্করণের ব্যবহারকারীরা একটি ক্যাপচার করা লিঙ্ক থেকে ওয়েব অ্যাপটি চালু করতে পারবেন।
আরও বিস্তারিত জানতে, ‘আপনার অ্যাপ কীভাবে চালু হবে তা নিয়ন্ত্রণ করুন’ দেখুন।
প্রতিক্রিয়া
ক্রোমিয়াম টিম ডিক্লারেটিভ লিঙ্ক ক্যাপচারিং নিয়ে আপনার অভিজ্ঞতা সম্পর্কে জানতে আগ্রহী।
এপিআই ডিজাইন সম্পর্কে আমাদের বলুন
এপিআই-এর এমন কিছু কি আছে যা আপনার প্রত্যাশা অনুযায়ী কাজ করছে না? অথবা আপনার ধারণাটি বাস্তবায়নের জন্য প্রয়োজনীয় কোনো মেথড বা প্রপার্টি কি অনুপস্থিত? নিরাপত্তা মডেল সম্পর্কে আপনার কোনো প্রশ্ন বা মন্তব্য আছে? সংশ্লিষ্ট গিটহাব রিপোজিটরিতে একটি স্পেক ইস্যু ফাইল করুন, অথবা বিদ্যমান কোনো ইস্যুতে আপনার মতামত যোগ করুন।
বাস্তবায়নে কোনো সমস্যা থাকলে রিপোর্ট করুন।
আপনি কি ক্রোমিয়ামের বাস্তবায়নে কোনো বাগ খুঁজে পেয়েছেন? অথবা এর বাস্তবায়ন কি স্পেসিফিকেশন থেকে ভিন্ন? new.crbug.com- এ একটি বাগ রিপোর্ট করুন। যতটা সম্ভব বিস্তারিত তথ্য, বাগটি পুনরায় তৈরি করার নির্দেশাবলী অন্তর্ভুক্ত করতে ভুলবেন না এবং Components বক্সে UI>Browser>WebAppInstalls লিখুন।
এপিআই-এর প্রতি সমর্থন দেখান
আপনি কি ডিক্লারেটিভ লিঙ্ক ক্যাপচারিং ব্যবহার করার পরিকল্পনা করছেন? আপনার প্রকাশ্য সমর্থন ক্রোমিয়াম টিমকে ফিচারগুলোকে অগ্রাধিকার দিতে সাহায্য করে এবং অন্যান্য ব্রাউজার নির্মাতাদের দেখায় যে এগুলোর সমর্থন করা কতটা জরুরি।
#DeclarativeLinkCapturing হ্যাশট্যাগটি ব্যবহার করে @ChromiumDev- কে একটি টুইট পাঠান এবং আমাদের জানান যে আপনি এটি কোথায় ও কীভাবে ব্যবহার করছেন।
সহায়ক লিঙ্ক
- স্পেক ড্রাফট
- ব্যাখ্যাকারী
- ক্রোমিয়াম বাগ
- প্রোটোটাইপ তৈরির অভিপ্রায়
- পরীক্ষা করার অভিপ্রায়
- ChromeStatus এন্ট্রি
কৃতজ্ঞতা স্বীকার
ডিক্লারেটিভ লিঙ্ক ক্যাপচারিং ম্যাট গিউকা কর্তৃক নির্দিষ্ট করা হয়েছিল, যেখানে অ্যালান কাটার এবং ডমিনিক এনজি- এর মতামত অন্তর্ভুক্ত ছিল। এপিআইটি অ্যালান কাটার দ্বারা বাস্তবায়িত হয়েছিল। এই নথিটি জো মেডলি , ম্যাট গিউকা, অ্যালান কাটার এবং শুনিয়া শিশিডো দ্বারা পর্যালোচিত হয়েছে।