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

ما هو المقصود بالتقاط الروابط التعريفية؟

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

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

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

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

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

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

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

التفعيل عبر about://flags

لتجربة "التقاط الروابط التعريفية" محليًا، بدون استخدام رمز مميّز لمرحلة التجربة والتقييم، عليك تفعيل علامة #enable-desktop-pwas-link-capturing في "about://flags".

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

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

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

الخصائص الديموغرافية

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

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

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

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

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

نقل البيانات إلى واجهة برمجة تطبيقات Launch Handler API

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

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

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

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

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

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

تشغيل واجهة برمجة التطبيقات الخاصة بالمعالج

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

  1. سجِّل موقعك الإلكتروني في تشغيل مرحلة التجربة والتقييم على مستوى المعالج ووضع مفتاح مرحلة التجربة والتقييم في تطبيق الويب.
  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 وإعلامنا بمكان استخدامك لها وطريقة استخدامك لها.

روابط مفيدة

شكر وتقدير

حدّد "مات جوكا" "التقاط الروابط التعريفية" بمشاركة "آلان كاتر" و"دومينيك نغ". وقد تم تنفيذ واجهة برمجة التطبيقات بواسطة آلان كاتتر. تمّت مراجعة هذه المقالة من قِبل جو ميدلي و"مات جيوكا" و"آلان كاتر" وشونيا شيشيدو. صورة رئيسية من تصوير زولماوري سافيدرا على قناة Unسبلاش