اختَر طريقة فتح الروابط داخل النطاق لتطبيق الويب التقدّمي باستخدام ميزة "التقاط الروابط التعريفية".

ما هي ميزة "التقاط الروابط التعريفية"؟

قد يؤدي النقر على الروابط على الويب أحيانًا إلى مفاجأة سارة. على سبيل المثال، يؤدي النقر على رابط يؤدي إلى YouTube على صفحة ويب على جهاز جوّال إلى فتح تطبيق YouTube لنظام التشغيل iOS أو Android، إذا كان مثبّتًا. ولكن عند تثبيت تطبيق YouTube المتوافق مع الأجهزة الجوّالة (PWA) على كمبيوتر مكتبي والنقر على رابط، يتم فتحه في علامة تبويب متصفّح.

ولكن يصبح الأمر أكثر تعقيدًا. ماذا لو لم يظهر الرابط في موقع إلكتروني، بل في رسالة محادثة يتم تلقّيها في أحد تطبيقات الدردشة من Google؟ في أنظمة التشغيل المخصّصة للكمبيوتر المكتبي، والتي تتضمّن مفهوم نوافذ التطبيقات المغلقة، إذا كان التطبيق مفتوحًا، هل يجب إنشاء نافذة أو علامة تبويب جديدة لكل نقرة على الرابط؟ هناك العديد من الطرق التي يمكن من خلالها تسجيل الروابط وعمليات التنقّل، بما في ذلك على سبيل المثال لا الحصر:

ميزة "الربط التعريفي" هي اقتراح لخاصية بيان تطبيق الويب تُسمى "capture_links" تسمح للمطوّرين بتحديد ما يجب أن يحدث بشكل تعريفي عندما يُطلب من المتصفّح الانتقال إلى عنوان URL ضمن نطاق التنقّل في التطبيق، من سياق خارج نطاق التنقّل. لا ينطبق هذا الاقتراح إذا كان المستخدم ضمن نطاق التنقّل (على سبيل المثال، إذا كان لدى المستخدم علامة تبويب متصفّح مفتوحة ضمن النطاق، ثمّ نقر على رابط مماثل).

في بعض الحالات الخاصة، مثل النقر على رابط باستخدام زر الماوس الأوسط (أو النقر بزر الماوس الأيمن ثم "فتح في علامة تبويب جديدة")، لا يتم عادةً بدء سلوك التقاط الرابط. لا يهمّ ما إذا كان الرابط target=_self أو target=_blank، وبالتالي سيتم فتح الروابط التي يتم النقر عليها في نافذة متصفّح (أو نافذة تطبيق متوافق مع الأجهزة الجوّالة (PWA) مختلف) في تطبيق PWA حتى إذا كانت ستؤدي عادةً إلى التنقّل ضمن علامة التبويب نفسها.

حالات الاستخدام المقترَحة

تشمل الأمثلة على المواقع الإلكترونية التي قد تستخدم واجهة برمجة التطبيقات هذه ما يلي:

  • تطبيقات الويب المتوافقة مع الأجهزة الجوّالة التي تريد فتح نافذة بدلاً من علامة تبويب في المتصفّح عندما ينقر المستخدم على رابط يؤدي إليها في بيئة سطح المكتب، غالبًا ما يكون من المنطقي فتح عدة نوافذ تطبيقات في وقت واحد.
  • تطبيقات الويب التقدّمية التي تعمل في نافذة واحدة ويفضّل المطوّر فيها فتح نسخة واحدة فقط من التطبيق في أي وقت، مع التركيز على النسخة الحالية عند استخدام عمليات التنقّل الجديدة تشمل حالات الاستخدام الفرعية ما يلي:
    • التطبيقات التي يكون من المنطقي تشغيل نسخة واحدة منها فقط (مثل مشغّل الموسيقى أو لعبة)
    • التطبيقات التي تتضمّن إدارة مستندات متعددة ضمن مثيل واحد (مثل شريط علامات تبويب تم إنشاؤه باستخدام HTML)

التفعيل من خلال about://flags

لتجربة ميزة "الربط التعريفي" على الجهاز، بدون رمز مميز لإصدار تجريبي من المصدر، فعِّل العلامة #enable-desktop-pwas-link-capturing في about://flags.

كيف يمكن استخدام ميزة "الربط التعريفي"؟

يمكن للمطوّرين تحديد كيفية تسجيل الروابط بشكل صريح من خلال الاستفادة من حقل بيان تطبيق الويب "capture_links" الإضافي. تأخذ سلسلة أو صفيفًا من السلاسل كقيمة لها. إذا تم تقديم صفيف من السلاسل، يختار وكيل المستخدم أول عنصر متوافق في القائمة، ويكون تلقائيًا "none". في ما يلي القيم المسموح بها:

  • "none" (الإعداد التلقائي): لا يتم تسجيل الروابط، ويتم الانتقال بشكلٍ عادي إلى النطاق الذي يخصّ تطبيق الويب التقدّمي (PWA) عند النقر على الروابط التي تؤدي إلى هذا النطاق بدون فتح نافذة تطبيق الويب التقدّمي (PWA).
  • "new-client": يؤدي النقر على كل رابط إلى فتح نافذة تطبيق ويب تقدّمي جديدة على عنوان URL هذا.
  • "existing-client-navigate": يتم فتح الرابط الذي تم النقر عليه في نافذة تطبيق ويب تقدّمي حالية، إذا كانت متاحة، أو في نافذة جديدة إذا لم تكن متاحة. إذا كانت هناك أكثر من نافذة تطبيق متوافق مع الأجهزة الجوّالة، قد يختار المتصفّح نافذة واحدة بشكل عشوائي. يتصرّف هذا الرمز مثل "new-client" في حال عدم فتح أي نافذة حاليًا. 🚨 توخّي الحذر. قد يؤدي هذا الخيار إلى فقدان البيانات، لأنّه يمكن الانتقال بشكل عشوائي بعيدًا عن الصفحات. يجب أن تكون المواقع الإلكترونية على دراية بأنّها توافق على هذا السلوك من خلال اختيار هذا الخيار. يعمل هذا الخيار بشكل أفضل مع المواقع الإلكترونية "للقراءة فقط" التي لا تحتفظ ببيانات المستخدمين في الذاكرة، مثل مشغّلات الموسيقى. إذا كانت الصفحة التي يتم الخروج منها تحتوي على حدث beforeunload، سيظهر للمستخدم الطلب قبل اكتمال عملية التنقّل.

عرض توضيحي

يتكوّن العرض التجريبي لميزة "التقاط الروابط التعريفية" من عرضَين تجريبيَين يتفاعلان معًا:

  1. https://continuous-harvest-tomato.glitch.me/
  2. https://hill-glitter-tree.glitch.me/

توضِّح لقطة الشاشة أدناه كيفية تفاعل هذين التطبيقَين. ويعرضان سلوكَين مختلفَين، "new-client" و"existing-client-navigate". احرص على اختبار التطبيقات في حالات مختلفة، سواء كانت تعمل في علامة تبويب أو كتطبيق مُثبَّت من خلال الويب، لمعرفة الفرق في السلوك.

الأمان والأذونات

صمم فريق Chromium ميزة "التقاط الروابط التعريفية" ونفّذها باستخدام المبادئ الأساسية المحدّدة في مقالة التحكّم في الوصول إلى ميزات فعّالة لمنصّة الويب، بما في ذلك التحكّم الذي يمارسه المستخدم والشفافية وسهولة الاستخدام. توفّر واجهة برمجة التطبيقات هذه خيارات تحكّم إضافية جديدة للمواقع الإلكترونية. أولاً، يمكنك فتح التطبيقات المثبَّتة تلقائيًا في نافذة. ويستخدم هذا الإجراء واجهة المستخدم الحالية، ولكنه يجعله ممكنًا للموقع الإلكتروني تفعيله تلقائيًا. ثانيًا، إمكانية تركيز نافذة حالية على نطاقها الخاص وإطلاق حدث يحتوي على عنوان URL الذي تم النقر عليه يهدف ذلك إلى السماح للموقع الإلكتروني بالتنقّل من نافذة حالية إلى صفحة جديدة، ما يؤدي إلى إلغاء مسار التنقّل التلقائي في HTML.

نقل البيانات إلى Launch Handler API

انتهت مرحلة التجربة والتقييم لواجهة برمجة التطبيقات Declarative Link Capturing API في 30 آذار (مارس) 2022 في الإصدار 97 من Chromium والإصدارات الأقدم. وسيتم استبدالها بمجموعة من الميزات وواجهات برمجة التطبيقات الجديدة في الإصدار 98 من Chromium والإصدارات الأحدث، بما في ذلك ميزة "التقاط الروابط" التي يفعّلها المستخدم وLaunch Handler API.

في الإصدار 98 من Chromium، أصبح سلوك تسجيل الروابط تلقائيًا الآن سلوكًا يوافق عليه المستخدم بدلاً من منحه لتطبيق الويب عند التثبيت. لتفعيل ميزة تسجيل الروابط، على المستخدم تشغيل تطبيق مثبَّت من المتصفّح باستخدام الفتح باستخدام واختيار تذكر اختياري.

مثال على إعداد "الفتح باستخدام" لتطبيق مثبّت مع تفعيل الخيار "تذكر اختياري"

بدلاً من ذلك، يمكن للمستخدمين تفعيل ميزة "التقاط الروابط" أو إيقافها لتطبيق ويب معيّن في صفحة إعدادات إدارة التطبيقات.

مثال لصفحة إعدادات تطبيق مثبّت

تتوفّر ميزة "التقاط الروابط" على نظام التشغيل ChromeOS فقط في الوقت الحالي، ونحن نعمل على إتاحتها على أنظمة التشغيل Windows وmacOS وLinux.

Launch Handler API

تم نقل التحكّم في التنقّل الوافد إلى Launch Handler API، ما يسمح لتطبيقات الويب بتحديد كيفية تشغيل تطبيق الويب في حالات مختلفة، مثل معالجة رابط أو مشاركة ملف أو معالجة ملف، وما إلى ذلك. لنقل البيانات من واجهة برمجة التطبيقات Declarative Link Capturing API إلى Launch Handler API:

  1. سجِّل موقعك الإلكتروني في فترة تجريبية لمعالج Launch Handler وضَع مفتاح الفترة التجريبية في تطبيق الويب.
  2. أضِف إدخال "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" }. باستخدام هذا الخيار، لن تنتقل الصفحات في نطاق تطبيقك تلقائيًا عند تسجيل عملية انتقال مرتبطة برابط. يجب معالجة LaunchParams في JavaScript من خلال استدعاء window.launchQueue.setConsumer() لتفعيل التنقّل.

يظلّ تسجيل مرحلة التجربة والتقييم في capture_links وميزة "الربط الوصفي" صالحًا حتى 30 آذار (مارس) 2022. سيضمن ذلك استمرار تمكّن المستخدمين الذين يستخدمون الإصدار 97 من Chromium والإصدارات الأقدم من تشغيل تطبيق الويب من خلال رابط تم تسجيله.

لمزيد من التفاصيل، يُرجى الاطّلاع على مقالة التحكّم في كيفية تشغيل تطبيقك.

الملاحظات

يريد فريق Chromium معرفة تجاربك مع ميزة "التقاط الروابط التعريفية".

أخبِرنا عن تصميم واجهة برمجة التطبيقات.

هل هناك مشكلة في واجهة برمجة التطبيقات لا تعمل على النحو المتوقّع؟ هل هناك طُرق أو سمات مفقودة تحتاجها لتنفيذ فكرتك؟ هل لديك سؤال أو تعليق حول ملف أمان الحساب؟ يمكنك الإبلاغ عن مشكلة في المواصفات في مستودع GitHub المقابل، أو إضافة ملاحظاتك إلى مشكلة حالية.

الإبلاغ عن مشكلة في التنفيذ

هل عثرت على خطأ في عملية تنفيذ Chromium؟ أم أنّ عملية التنفيذ مختلفة عن المواصفات؟ يمكنك إرسال بلاغ عن خلل على الرابط new.crbug.com. احرص على تضمين أكبر قدر ممكن من التفاصيل، وتعليمات بسيطة لإعادة إنتاج الخلل، وأدخِل UI>Browser>WebAppInstalls في مربّع المكوّنات. يُعدّ تطبيق Glitch مثاليًا لمشاركة عمليات إعادة الإنتاج بسرعة وسهولة.

إظهار الدعم لواجهة برمجة التطبيقات

هل تخطّط لاستخدام ميزة "الربط التعريفي"؟ يساعد دعمك العلني فريق Chromium في تحديد الميزات ذات الأولوية وإظهار مدى أهمية توفيرها لمطوّري المتصفّحات الآخرين.

أرسِل تغريدة إلى ‎@ChromiumDev باستخدام الهاشتاغ #DeclarativeLinkCapturing وأطلِعنا على مكان استخدامك له وطريقة استخدامه.

روابط مفيدة

الشكر والتقدير

حدّد مات جيوكا ميزة "الربط التعريفي" بمساعدة ألان كاتلر ودومينيك نج. نفَّذ واجهة برمجة التطبيقات "ألان كوتر". راجع هذه المقالة كلّ من جو ميدلي و"مات جيوكا" و"آلان كوتر" وشونيا شيشيدو. الصورة الرئيسية من إنشاء Zulmaury Saavedra على Unsplash.