تتوفّر الآن طريقة للحصول على إذن دائم بالقراءة والكتابة في الملفات والمجلدات بدون الحاجة إلى منح الأذونات بشكل متكرّر. توضّح هذه المشاركة كيفية عملها. قبل الخوض في التفاصيل، إليك ملخّص سريع عن الوضع الحالي وال المشكلة التي يتم حلّها.
التحديات في الطريقة الحالية
تسمح واجهة برمجة التطبيقات File System Access API للمطوّرين بالوصول إلى الملفات على القرص الصلب المحلي للمستخدم بطريقة قراءة و (اختياريًا) كتابة. من بين التطبيقات الرائجة (من بين العديد من التطبيقات الأخرى) التي تستخدم واجهة برمجة التطبيقات هذه هو Visual Studio Code (VS Code)، وهو بيئة تطوير متكاملة من Microsoft تعمل مباشرةً في المتصفّح. عند فتح VS Code، ستظهر لك شاشة مرحبًا حيث يمكنك إنشاء ملف جديد أو فتح ملف أو مجلد حالي.
إذا نقرت على فتح مجلد واخترت أحد المجلدات على القرص الصلب، سيسألك المتصفّح ما إذا كنت تريد منح VS Code إذن العرض لهذا المجلد.
بعد منح الإذن بالوصول، يمكنك التنقّل في التسلسل الهرمي للمجلدات وفتح الملفات في محرِّر IDE. إذا أجريت تعديلاً على أي من الملفات، سيسألك المتصفّح ما إذا كنت تريد منح الإذن بالوصول إلى المجلد من أجل التعديل.
في حال السماح بذلك، سيتغيّر رمز الملف في شريط العناوين، وستتم إضافة سهم صغير pointing down يشير إلى أنّ التطبيق لديه أذونات القراءة والكتابة. لتغيير الأذونات، انقر على الرمز ثم على إزالة إذن الوصول، لكي لا يعود بإمكان التطبيق تعديل الملفات.
ويستمر إذن الوصول إلى أن يتم إغلاق علامة التبويب الأخيرة للموقع المصدر. إذا أغلقت التطبيق ثم فتحته مرة أخرى، يتيح لك VS Code نوعًا ما مواصلة العمل من حيث توقفت. عند النقر على فتح الملفات الأخيرة، يعرض VS Code المجلد الذي تم فتحه سابقًا لإعادة فتحه.
وحتى إذا سبق لك منح إذن الكتابة للمجلد، عليك الآن منح الإذن بالوصول مرة أخرى. يصبح هذا الأمر مرهقًا بسرعة. قبل الخوض في مناقشة الحلّ، أي الأذونات الثابتة لواجهة برمجة التطبيقات File System Access API، كيف يتمكن VS Code من تذكُّر المجلدات الأخيرة؟
في واجهة برمجة التطبيقات File System Access API، يتم إدارة الوصول إلى الملفات والمجلدات من خلال كائنات
FileSystemHandle
: كائنات
FileSystemFileHandle
للملفات وكائنات
FileSystemDirectoryHandle
للمجلدات (الأدلة). يمكن تخزين كليهما
في IndexedDB،
وهو ما يفعله VS Code بالضبط. يمكنك الاطّلاع على ذلك من خلال فتح Chrome DevTools، وفي علامة التبويب التطبيق، انتقِل إلى قسم IndexedDB، ثم
اختَر الجدول vscode-filehandles-store
ذي الصلة في قاعدة بيانات vscode-web-db
.
الطريقة الجديدة: التغييرات ووقت حدوثها
يطلق Chrome سلوكًا جديدًا للسماح للمستخدمين بمنح إذن وصول دائم
إلى ملفاتهم ومجلداتهم بشكل اختياري، ما يجنبهم الحاجة إلى إعادة طلب الإذن باستمرار.
يمكن ملاحظة السلوك الجديد اعتبارًا من الإصدار 122 من Chrome. لاختبارها في وقت أبكر، بدءًا من Chrome 120، بدِّل علامتَي الإصدار
chrome://flags/#file-system-access-persistent-permission
و
chrome://flags/#one-time-permission
إلى مفعَّل.
أولاً، يتألف السلوك الجديد من طلب إذن ثلاثي الاتجاهات جديد يسمح للمستخدمين بشكل اختياري بمنح التطبيقات إذن الوصول إلى ملفات ومجلدات محدّدة في كل زيارة.
تتضمّن رسالة الطلب الجديدة هذه الخيارات التالية:
- السماح هذه المرة: يسمح للتطبيق بالوصول إلى الملفات في الجلسة الحالية. (يتوافق ذلك مع السلوك الحالي).
- السماح بالاستخدام في كل زيارة: يمنح هذا الخيار للتطبيق إذن الوصول إلى البيانات بشكل غير محدود ما لم يتم إبطاله. بعد منح التطبيق إذن الوصول الدائم، سيتمكّن أيضًا من الوصول الدائم إلى الملفات والمجلدات التي تم فتحها حديثًا.
- عدم السماح: لا يسمح للتطبيق بالوصول إلى الملفات. (يتوافق هذا الإجراء مع السلوك الحالي).
ثانيًا، يتضمّن السلوك الجديد قسمًا جديدًا في إعدادات الموقع الإلكتروني، ويمكن للمستخدِمين الوصول إليه من خلال رمز التشغيل بجانب زر الإيقاف/التفعيل تعديل الملف.
عند النقر على رمز التشغيل هذا، يتم فتح إعدادات الخصوصية والأمان للتطبيق المعنيّ، حيث يظهر للمستخدم قائمة بجميع الملفات والمجلدات التي يمكن للتطبيق الوصول إليها. يمكن إلغاء إذن الوصول لكل عنصر على حدة من خلال النقر على رمز سلة المهملات. تعني إزالة إذن الوصول لكل عنصر أنّه لا يزال بإمكان التطبيق الوصول إلى الملفات بشكل عام. لإلغاء الإذن بالوصول بشكل عام، يمكن للمستخدم النقر على الرمز في شريط العناوين، كما هو موضّح سابقًا.
كيفية بدء السلوك الجديد
لم يتم إجراء أي تغييرات على واجهة برمجة التطبيقات File System Access API موجّهة للمطوّرين. لبدء السلوك الجديد باستخدام الأذونات الثابتة، هناك ثلاث طرق مع شرطان أساسيان مختلفان يجب استيفاؤهما:
- يجب أن يكون المستخدم قد منح الإذن لملف أو مجلد (أو عدة
ملفات أو مجلدات) أثناء الزيارة الأخيرة إلى مصدر، ويجب أن يكون التطبيق قد
خزّن عناصر
FileSystemHandle
المقابلة في IndexedDB. عند الزيارة التالية إلى المصدر، يجب أن يكون التطبيق قد استرجع أيًا من عناصرFileSystemHandle
المخزّنة من IndexedDB ثم استدعاى أسلوبFileSystemHandle.requestPermission()
. في حال استيفاء هذه الشروط المسبقة، سيتم عرض الطلب الجديد الثلاثي. - من المفترض أن يكون المصدر قد استدعى
FileSystemHandle.requestPermission()
طريقة علىFileSystemHandle
تم منحها إذن الوصول من قبل، ولكن تم إلغاء إذن وصولها تلقائيًا بسبب وضع علامة التبويب في الخلفية لبعض الوقت. (يعمل إبطال الأذونات تلقائيًا استنادًا إلى المنطق نفسه الموضّح في المقالة الأذونات لمرة واحدة في Chrome.) في حال استيفاء هذه الشروط الأساسية، سيتم عرض الطلب الجديد الثلاثي. - يجب أن يكون المستخدم قد ثبَّت التطبيق. ستُحفظ الأذونات تلقائيًا في التطبيقات المثبَّتة بعد أن يمنح المستخدم الإذن بالوصول. في هذه الحالة، لن يتم عرض الرسالة المقترَحة الثلاثية، بل سيحصل التطبيق على السلوك الجديد تلقائيًا.
في الحالتَين الأولى والثانية، يسرد الطلب جميع FileSystemHandle
العناصر التي كان بإمكان التطبيق الوصول إليها سابقًا، وليس فقط العنصر الذي يتم استدعاء الأسلوب
requestPermission()
له. بما يتوافق مع
طريقة عمل الأذونات لمرة واحدة،
إذا رفض المستخدم الطلب أو أغلقه أكثر من ثلاث مرات، لن يتم تفعيله بعد ذلك، وسيظهر طلب الإذن العادي بدلاً منه.
تجربة السلوك الجديد
إذا كان لديك إصدار متوافق من Chrome أو تم ضبط العلامات المطلوبة، يمكنك اختبار السلوك الجديد في VS Code على الويب. افتح مجلدًا وامنح الإذن بالوصول إليه، ثم أغلِق علامة التبويب وأعِد فتحها وانقر على فتح العناصر الأخيرة (يُرجى العِلم أنّ إعادة التحميل الفوري لا يؤدي إلى ظهور الطلب، ويلزم إغلاق كل علامات التبويب). اختَر المجلد السابق وسيظهر الطلب الجديد. للحصول على حالة اختبار أكثر بساطة، يمكنك الاطّلاع على demo الوصول إلى نظام الملفات الثابت والاطّلاع على رمز المصدر.
الاستنتاجات
إنّ الأذونات الدائمة لواجهة برمجة التطبيقات File System Access API هي أحد الميزات الأكثر طلبًا لواجهة برمجة التطبيقات، وخطأ التنفيذ هو أحد الطلبات المتكررة أيضًا، حيث وضع العديد من المطوّرين علامة عليه. من خلال إتاحة هذه الميزة للمطوّرين، والأهم من ذلك، للمستخدمين، تم الآن سد فجوة مهمة في الميزات مقارنةً بالتطبيقات المخصّصة للمنصة.
خدمات الإقرار
راجعت كريستينا هولينغسورث وأوستين سوليفان وراشيل أندرو هذه المشاركة.