ما هي ميزة "التقاط الروابط التعريفية"؟
قد يكون النقر على الروابط على الويب مفاجأة سارّة في بعض الأحيان. على سبيل المثال، يؤدي النقر على رابط صفحة ويب إلى YouTube على جهاز جوّال إلى فتح تطبيق YouTube على iOS أو Android، إذا كان مثبّتًا. ولكن عند تثبيت تطبيق YouTube التقدّمي على جهاز كمبيوتر مكتبي والنقر على رابط، سيتم فتحه في علامة تبويب المتصفّح.
لكنّ الأمر يصبح أكثر تعقيدًا. ماذا لو ظهر الرابط ليس في موقع إلكتروني، بل في رسالة دردشة تلقّيتها في أحد تطبيقات الدردشة من Google؟ على أنظمة التشغيل المخصّصة لأجهزة الكمبيوتر المكتبي، والتي تتضمّن مفهوم نوافذ التطبيقات المنفصلة، إذا كان التطبيق مفتوحًا، هل يجب إنشاء نافذة أو علامة تبويب جديدة لكل نقرة على رابط؟ عند التفكير في الأمر، نجد أنّ هناك العديد من الطرق التي يمكن من خلالها تسجيل الروابط وعمليات التنقّل، بما في ذلك على سبيل المثال لا الحصر:
- الروابط التي تم النقر عليها من صفحات ويب أخرى
- يتم فتح عنوان URL من تطبيق خاص بالنظام الأساسي في نظام التشغيل.
- عمليات التنقّل التي مصدرها App Shortcuts API
- الروابط التي تمرّ عبر معالجات بروتوكول عناوين URL
- عمليات التنقّل الناتجة عن معالجات الملفات
- عمليات التنقّل الناتجة عن Share Target API
- …وغيرها.
"التقاط الروابط بشكل تعريفي" هو اقتراح بشأن إحدى خصائص بيان تطبيق الويب، وهي "capture_links"
التي تتيح للمطوّرين تحديد الإجراءات التي يجب اتّخاذها بشكل تعريفي عندما يطلب المتصفّح
الانتقال إلى عنوان URL يقع ضمن نطاق التنقّل في التطبيق، وذلك من سياق خارج نطاق التنقّل. لا ينطبق هذا الاقتراح إذا كان المستخدم ضِمن نطاق التنقّل (على سبيل المثال، إذا كان لدى المستخدم علامة تبويب متصفّح مفتوحة ضِمن النطاق، ونقر على رابط داخلي).
لا تؤدي بعض الشروط الخاصة، مثل النقر بالزر الأوسط على رابط (أو النقر بالزر الأيمن ثم "الفتح في علامة تبويب جديدة")، عادةً إلى تشغيل سلوك التقاط الروابط. لا يهم ما إذا كان الرابط target=_self
أو target=_blank
، لذا سيتم فتح الروابط التي يتم النقر عليها في نافذة المتصفح (أو نافذة تطبيق ويب تقدمي مختلف) في تطبيق الويب التقدمي حتى إذا كانت ستؤدي عادةً إلى التنقل داخل علامة التبويب نفسها.
حالات الاستخدام المقترَحة
في ما يلي أمثلة على المواقع الإلكترونية التي قد تستخدم واجهة برمجة التطبيقات هذه:
- تطبيقات الويب التقدّمية التي تريد فتح نافذة بدلاً من علامة تبويب في المتصفّح عندما ينقر المستخدم على رابط يؤدي إليها. في بيئة سطح المكتب، يكون من المنطقي غالبًا فتح نوافذ تطبيقات متعددة في الوقت نفسه.
- تطبيقات الويب التقدّمية ذات النافذة الواحدة التي يفضّل المطوّر أن يكون هناك نسخة واحدة فقط من التطبيق مفتوحة في أي وقت، مع تركيز عمليات التنقّل الجديدة على النسخة الحالية تشمل حالات الاستخدام الفرعية ما يلي:
- التطبيقات التي يكون من المنطقي تشغيل نسخة واحدة فقط منها (مثل مشغّل موسيقى أو لعبة)
- التطبيقات التي تتضمّن إدارة مستندات متعددة ضمن مثيل واحد (مثل شريط علامات تبويب تم تنفيذه باستخدام HTML).
التفعيل من خلال about://flags
لتجربة ميزة "التقاط الروابط الإعلانية" محليًا بدون رمز مميّز للتجربة الأصلية، فعِّل العلامة
#enable-desktop-pwas-link-capturing
في about://flags
.
كيفية استخدام ميزة "التقاط الروابط بشكل تعريفي"؟
يمكن للمطوّرين تحديد كيفية التقاط الروابط بشكل تصريحي من خلال الاستفادة من حقل بيان تطبيق الويب الإضافي "capture_links"
. تتلقّى هذه السمة سلسلة أو مصفوفة من السلاسل كقيمة لها. في حال توفير مصفوفة من السلاسل، يختار برنامج وكيل المستخدم العنصر الأول المتوافق في القائمة، مع ضبط القيمة التلقائية على "none"
. يمكن استخدام القيم التالية:
-
"none"
(الإعداد التلقائي): لا يتم تسجيل الروابط، ويتم الانتقال إلى الروابط التي تم النقر عليها والتي تؤدي إلى نطاق تطبيق الويب التقدّمي هذا كالمعتاد بدون فتح نافذة تطبيق الويب التقدّمي. "new-client"
: يؤدي النقر على كل رابط إلى فتح نافذة جديدة لتطبيق الويب التقدّمي (PWA) في عنوان URL هذا.-
"existing-client-navigate"
: يتم فتح الرابط الذي تم النقر عليه في نافذة تطبيق ويب تقدّمي (PWA) حالية، إذا كانت متاحة، أو في نافذة جديدة إذا لم تكن متاحة. إذا كانت هناك أكثر من نافذة لتطبيق ويب تقدّمي، قد يختار المتصفّح إحداها بشكل عشوائي. يتصرف هذا الخيار مثل"new-client"
إذا لم تكن أي نافذة مفتوحة حاليًا. 🚨 انتبه! قد يؤدي هذا الخيار إلى فقدان البيانات، لأنّه يمكن الانتقال من الصفحات بشكل عشوائي. يجب أن تكون المواقع الإلكترونية على دراية بأنّها توافق على هذا السلوك عند اختيار هذا الخيار. يعمل هذا الخيار بشكل أفضل مع المواقع الإلكترونية "للقراءة فقط" التي لا تحتفظ ببيانات المستخدمين في الذاكرة، مثل مشغّلات الموسيقى. إذا كانت الصفحة التي يتم الانتقال منها تتضمّن حدثbeforeunload
، سيظهر الطلب للمستخدم قبل اكتمال عملية الانتقال.
عرض توضيحي
يتألف الإصدار التجريبي من ميزة "التقاط الروابط التعريفية" في الواقع من إصدارَين تجريبيَين يتفاعلان معًا:
- الموقع 1
- الموقع 2
يوضّح الفيديو أدناه كيفية تفاعلهما. وهي تعرض سلوكَين مختلفَين، "new-client"
و"existing-client-navigate"
. احرص على اختبار التطبيقات في حالات مختلفة، سواء كانت تعمل في علامة تبويب أو كتطبيق ويب تقدّمي مثبَّت، لمعرفة الفرق في السلوك.
الأمان والأذونات
صمّم فريق Chromium ميزة "التقاط الروابط الإعلاني" ونفّذها باستخدام المبادئ الأساسية المحدّدة في التحكّم في الوصول إلى الميزات الفعّالة لمنصة الويب، بما في ذلك عناصر التحكّم الخاصة بالمستخدم والشفافية وبيئة العمل المريحة. تتيح واجهة برمجة التطبيقات هذه للمواقع الإلكترونية خيارات تحكّم إضافية جديدة. أولاً، إمكانية فتح التطبيقات المثبَّتة تلقائيًا في نافذة تستخدم هذه الطريقة واجهة المستخدم الحالية، ولكنها تتيح للموقع الإلكتروني تشغيلها تلقائيًا. ثانيًا، إمكانية تركيز نافذة حالية على نطاقها الخاص وإطلاق حدث يتضمّن عنوان URL الذي تم النقر عليه. والهدف من ذلك هو السماح للموقع الإلكتروني بتوجيه نافذة حالية إلى صفحة جديدة، ما يؤدي إلى تجاهل مسار التنقّل التلقائي في HTML.
نقل البيانات إلى Launch Handler API
انتهت صلاحية مرحلة التجربة والتقييم في 30 آذار (مارس) 2022 لإصدار Chromium 97 والإصدارات الأقدم من Declarative Link Capturing API. سيتم استبدالها بمجموعة من الميزات وواجهات برمجة التطبيقات الجديدة في الإصدار 98 من Chromium والإصدارات الأحدث، والتي تتضمّن ميزة التقاط الروابط التي يفعّلها المستخدم وLaunch Handler API.
تسجيل الروابط
في الإصدار 98 من Chromium، أصبح بإمكان المستخدمين تفعيل ميزة التقاط الروابط تلقائيًا بدلاً من منحها لتطبيق الويب عند تثبيته. لتفعيل ميزة التقاط الروابط، على المستخدم تشغيل تطبيق مثبَّت من المتصفّح باستخدام الفتح باستخدام واختيار تذكُّر اختياري.
بدلاً من ذلك، يمكن للمستخدمين تفعيل ميزة التقاط الروابط أو إيقافها لتطبيق ويب معيّن في صفحة إعدادات إدارة التطبيقات.
ميزة "التقاط الروابط" متاحة حاليًا على أجهزة ChromeOS فقط، ونعمل على توفيرها على أجهزة Windows وmacOS وLinux.
Launch Handler API
تم نقل عنصر التحكّم في عملية التنقّل الواردة إلى Launch Handler API، ما يتيح لتطبيقات الويب تحديد طريقة تشغيلها في حالات مختلفة، مثل التقاط الروابط أو مشاركة الهدف أو معالجة الملفات وما إلى ذلك. للانتقال من Declarative Link Capturing API إلى Launch Handler API، اتّبِع الخطوات التالية:
- سجِّل موقعك الإلكتروني في التجربة الأصلية لمعالج الإطلاق، وضَع مفتاح التجربة الأصلية في تطبيقك على الويب.
أضِف إدخال
"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
وتسجيل مرحلة التجربة والتقييم في Declarative Link Capturing سارية حتى 30 مارس 2022. سيضمن ذلك أنّه سيظل بإمكان المستخدمين على الإصدار 97 من Chromium والإصدارات الأقدم تشغيل تطبيق الويب من خلال رابط تم التقاطه.
لمزيد من التفاصيل، اطّلِع على المقالة التحكّم في طريقة تشغيل تطبيقك.
الملاحظات
يريد فريق Chromium معرفة رأيك في تجربة استخدام ميزة "التقاط الروابط الإعلانية".
أخبِرنا عن تصميم واجهة برمجة التطبيقات
هل هناك أي شيء في واجهة برمجة التطبيقات لا يعمل على النحو المتوقّع؟ أو هل هناك طرق أو سمات مفقودة تحتاج إليها لتنفيذ فكرتك؟ هل لديك سؤال أو تعليق بشأن نموذج الأمان؟ يمكنك الإبلاغ عن مشكلة في المواصفات في مستودع GitHub ذي الصلة، أو إضافة أفكارك إلى مشكلة حالية.
الإبلاغ عن مشكلة في عملية التنفيذ
هل عثرت على خطأ في تنفيذ Chromium؟ أو هل يختلف التنفيذ عن المواصفات؟
يمكنك الإبلاغ عن خطأ على new.crbug.com. احرص على تضمين أكبر قدر ممكن من التفاصيل،
وتعليمات بسيطة لإعادة إنتاج الخطأ، وأدخِل UI>Browser>WebAppInstalls
في المربّع المكوّنات.
إظهار الدعم لواجهة برمجة التطبيقات
هل تخطّط لاستخدام ميزة "التقاط الروابط الإعلانية"؟ يساعد دعمك العلني فريق Chromium في تحديد أولويات الميزات، ويوضّح لمورّدي المتصفّحات الآخرين مدى أهمية توفيرها.
أرسِل تغريدة إلى @ChromiumDev باستخدام الهاشتاغ
#DeclarativeLinkCapturing
وأخبرنا عن مكان استخدامك لهذه الميزة وكيفية استخدامها.
روابط مفيدة
الإقرارات
تم تحديد ميزة "التقاط الروابط التعريفية" من قِبل مات غيوكا بمساهمة من آلان كاتر ودومينيك نغ. تم تنفيذ واجهة برمجة التطبيقات بواسطة "آلان كوتر". راجع هذه المقالة جو ميدلي و"مات جيوكا" و"آلان كاتر" وشونيا شيشيدو. الصورة الرئيسية من Zulmaury Saavedra على Unsplash