متوفر أيضًا بلغات أخرى: English · Español · Português · Français
Permissions-Policy: التحويل بين الترويسة وسمة allow
حوِّل السياسة بين صيغتَي كتابتها، وشاهد بالضبط ما الذي يتغيّر بينهما.
ما Permissions Policy؟
Permissions Policy هي الطريقة التي تعلن بها الصفحة أي خصائص المتصفح يحق لها ولما تضمّنه استعمالها: الكاميرا والميكروفون وتحديد الموقع وملء الشاشة وطلبات الدفع وعشرات غيرها. وقد حلّت محلّ Feature Policy، وتُسلَّم بطريقتين: ترويسةَ استجابة اسمها Permissions-Policy تغطي المستند كله، وسمةَ allow على إطار مضمَّن بعينه لا تغطي إلا ذلك الإطار.
وكلتاهما معرَّفتان في مواصفة W3C واحدة، وتعبّران عن الفكرة نفسها: اسم خاصية يتبعه سرد بالأصول التي يجوز لها استعمالها. والذي يفوت المرء بسهولة أن المواصفة تكتب ذلك السرد بنحوَين مختلفين، واحد لكل طريقة تسليم، ولا يشبه أحدهما الآخر.
وهذا المحوِّل يأخذ أيًّا من الصيغتين ويعطي الأخرى، ثم يسمّي كل فرق طبّقه. هو أداة ترجمة لا مولّد سياسات: لا يقرّر ما ينبغي أن تكون عليه سياستك، ولا يرى رأيًا في الخصائص التي يحسن تقييدها.
طريقة الاستعمال
- حدّد من أي الصيغتين تنطلق. سمة allow في إطار مضمَّن، أو قيمة ترويسة Permissions-Policy. والمحلّل يتبع نحو ما تختاره، فالترويسة الملصوقة على أنها سمة يُنبَّه على خطئها بدل قبولها في صمت.
- الصق القيمة وحدها. بلا اسم السمة، وبلا علامتَي الاقتباس المحيطتين، وبلا اسم حقل الترويسة ولا النقطتين — فقط ما بالداخل. وأزرار الأمثلة تُحمِّل خمس سياسات، اختيرت كل واحدة لتُظهر جزءًا مختلفًا من النحوَين.
- اقرأ المخرجَين واللوحات الثلاث تحتهما. واحدة تسرد ما وجده المحلّل فيما كتبتَه. وأخرى تسرد ما لا ينجو من الانتقال إلى ترويسة. وثالثة تسمّي الفروق الأربعة بين النحوَين، لترى أيّها انطبق على سياستك.
أربعة فروق بين النحوَين
القسم 5.1 من المواصفة يعطي السمةَ نحوًا خاصًا بها بصيغة ABNF؛ والقسم 5.2 يقول إن الترويسة قاموس Structured Fields بدل ذلك. والنتيجة أن allow="geolocation 'self' https://example.com" وPermissions-Policy: geolocation=(self "https://example.com") هما السياسة نفسها مكتوبةً بطريقتين، وأربعة أشياء تتغيّر بينهما.
علامات الاقتباس تنقلب. فالكلمات المفتاحية مقتبسة في السمة ومجرّدة في الترويسة، والأصول على العكس: مجرّدة في السمة وسلاسلَ مقتبسة في الترويسة. ويتغيّر الفاصل كذلك: فاصلة منقوطة بين التوجيهات في السمة، وفاصلة في الترويسة، لأن أعضاء القاموس تُفصل بفواصل. ومنع خاصية هو الكلمة المفتاحية none في السمة، وقوسان فارغان في الترويسة — والكلمة لا تظهر في أي ترويسة أصلًا.
والرابع هو الذي يستحق الحذر، لأنه يقلب المعنى في صمت بدل أن يفشل. فخاصية تُكتب بلا شيء بعدها تعني العكس في كل من النحوَين. القوسان الفارغان في الترويسة سردٌ بلا أصول: لا أحد. أما الاسم المجرّد في السمة فليس فارغًا إطلاقًا: يقول القسم 5.1 إن السرد يعادل حينئذ 'src'، أي أصل ما يحمّله ذلك الإطار. حوِّل أحدهما إلى الآخر دون انتباه، فتصير خاصية ممنوعة خاصيةً مسموحة.
حدود نذكرها بصراحة
ثمّة أمر تقوله السمة ولا تقوله الترويسة. فالكلمة المفتاحية 'src' تعني أصل المستند المشار إليه في سمة src للإطار، وترويسةُ الاستجابة غير مرتبطة بأي إطار، فلا شيء تشير إليه. والمواصفة دقيقة هنا وتستحق قراءة متمهّلة: القسم 4 يقول إن الكلمة المفتاحية قد تظهر في نص السرود في الترويسات وفي نصوص السمات معًا، فليست خطأً نحويًا، والقسم 9 لا يحلّها إلا إذا أُعطي أصل هدف. ففي الترويسة تُحلَّل ثم لا تفعل شيئًا. وهذه الأداة تسمّي ذلك فقدًا لا خطأً، لأنه ما تصفه المواصفة.
وأسماء الخصائص لها الشكل نفسه. يقول القسم 5.2 إن عضو القاموس إذا لم يسمِّ خاصيةً يدعمها المتصفح فإنه يُتجاهَل في خطوات المعالجة. فخطأ مطبعي في ترويسة لا يُنتج تنبيهًا في أي مكان: التوجيه ببساطة لا أثر له. وهذا المحوِّل يتحقّق من كتابة الاسم كتابةً مشروعة — حروف وأرقام وشرطات — لكنه عمدًا لا يحمل قائمةً بالخصائص المدعومة، لأن تلك القائمة تختلف بين المتصفحات والإصدارات، ونسخةٌ قديمة منها أسوأ من لا شيء.
وأمر أخير. تستشهد المواصفة بـ RFC 8941 لنحو الترويسة، وقد حلّت RFC 9651 محلّ ذلك المستند في 2024. والنسخة الجديدة تضيف نوعَي بيانات لا تستعملهما هذه الترويسة، وتنقل النحو إلى ملحق إرشادي، وتُحكِم معالجة إخفاقات التحليل؛ ولا تغيّر شيئًا في القواميس ولا الرموز ولا القوائم بين قوسين. فالاستشهاد قديم أما السلوك فلا — ويحسن قول ذلك كاملًا، لأن أيًّا من الشطرين وحده مضلِّل.
لماذا هي مجانية؟
هما محلِّلان صغيران ومُخرِجان، ومتصفحك يشغّلها كلها وأنت تكتب. لا خادم في الأمر، فليس هناك ما يُحاسَب عليه ولا حساب يُنشأ.
لا يُرفع شيء. السياسة التي تلصقها تبقى داخل متصفحك.