تتوفّر الآن طريقة للحصول على إذن دائم بالقراءة والكتابة في الملفات والمجلدات بدون الحاجة إلى منح الأذونات بشكل متكرّر. توضّح هذه المشاركة طريقة عملها. قبل الخوض في التفاصيل، إليك ملخّصًا سريعًا للوضع الراهن والمشكلة التي يتم حلّها.
المشاكل في الطريقة الحالية
تتيح واجهة برمجة التطبيقات File System Access API للمطوّرين الوصول إلى الملفات على القرص الصلب المحلي للمستخدم بطريقة تتيح القراءة والكتابة (اختياريًا). أحد التطبيقات الشائعة (من بين تطبيقات أخرى كثيرة) التي تستخدم واجهة برمجة التطبيقات هذه هو Visual Studio Code (VS Code)، وهو بيئة تطوير متكاملة من Microsoft تعمل مباشرةً في المتصفّح. عند فتح VS Code، ستظهر لك شاشة الترحيب حيث يمكنك إنشاء ملف جديد أو فتح ملف أو مجلد حالي.
إذا نقرت على فتح مجلد واخترت أحد المجلدات على القرص الصلب، سيطلب منك المتصفح تحديد ما إذا كنت تريد منح VS Code إذن عرض هذا المجلد.
بعد منح الإذن بالوصول، يمكنك التنقّل في التسلسل الهرمي للمجلدات وفتح الملفات في محرّر VS Code. إذا أجريت تعديلاً على أي من الملفات، سيطلب منك المتصفّح تحديد ما إذا كنت تريد منح الإذن بتعديل المجلد.
في حال السماح بذلك، سيتغيّر رمز الملف في شريط العناوين، وسيتم إضافة سهم صغير للأسفل يشير إلى أنّ التطبيق لديه أذونات القراءة والكتابة. لتغيير الأذونات، انقر على الرمز ثم على إزالة إذن الوصول، وبذلك لن يتمكّن التطبيق من تعديل الملفات.
يستمر الوصول إلى أن تغلق علامة التبويب الأخيرة للمصدر. إذا أغلقت التطبيق ثم فتحته مرة أخرى، سيسمح لك VS Code نوعًا ما بمتابعة العمل من حيث توقفت. عند النقر على فتح الملفات الأخيرة، سيقترح VS Code إعادة فتح المجلد الذي فتحته سابقًا.
وحتى إذا سبق لك منح إذن الكتابة إلى المجلد، عليك الآن منح الإذن بالوصول إليه مرة أخرى. ويصبح ذلك مرهقًا بسرعة. قبل التعرّف على الحلّ، أي الأذونات الدائمة لواجهة برمجة التطبيقات File System Access API، كيف يتذكّر VS Code المجلدات الحديثة؟
في File System Access API، تتم إدارة الوصول إلى الملفات والمجلدات من خلال كائنات
FileSystemHandle
، وهي كائنات
FileSystemFileHandle
للملفات، وكائنات
FileSystemDirectoryHandle
للمجلدات (الأدلة). يمكن تخزين كليهما في IndexedDB، وهذا ما يفعله VS Code بالضبط. يمكنك الاطّلاع على ذلك من خلال فتح "أدوات مطوّري Chrome"، ثم الانتقال إلى قسم IndexedDB في علامة التبويب التطبيق، واختيار الجدول ذي الصلة vscode-filehandles-store
في قاعدة البيانات vscode-web-db
.
الطريقة الجديدة: التغييرات وتاريخ تطبيقها
سيطلق Chrome سلوكًا جديدًا يتيح للمستخدمين منح إذن وصول دائم بشكل اختياري إلى ملفاتهم ومجلداتهم، ما يجنّبهم الحاجة إلى إعادة طلب الإذن منهم باستمرار.
يمكن ملاحظة السلوك الجديد اعتبارًا من الإصدار 122 من Chrome. لاختبارها في وقت مبكر، بدءًا من الإصدار 120 من Chrome، فعِّل العلامتَين 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). في حال استيفاء هذه الشروط المسبقة، سيتم عرض الطلب الجديد المكوّن من ثلاثة أجزاء. - يجب أن يكون المستخدم قد ثبّت التطبيق، وستبقى الأذونات التي يمنحها المستخدم محفوظة تلقائيًا. في هذه الحالة، لن يظهر طلب الموافقة الثلاثي، بل سيتم تلقائيًا تطبيق السلوك الجديد على التطبيق.
في الحالة الأولى والثانية، تعرض الرسالة جميع الكائنات التي سبق للتطبيق الوصول إليها، وليس فقط الكائن الذي يتم استدعاء طريقة requestPermission()
له.FileSystemHandle
تماشيًا مع
طريقة عملها في الأذونات التي تُمنح لمرة واحدة،
إذا رفض المستخدم الطلب أو تجاهله أكثر من ثلاث مرات، لن يظهر الطلب مرة أخرى، وسيظهر بدلاً منه طلب الإذن العادي.
تجربة السلوك الجديد
إذا كان لديك إصدار متوافق من Chrome أو تم ضبط العلامات المطلوبة، يمكنك اختبار السلوك الجديد في VS Code على الويب. افتح مجلدًا وامنح الإذن بالوصول إليه، ثم أغلِق علامة التبويب وأعِد فتحها وانقر على فتح الملفات الحديثة (يُرجى العِلم أنّ إعادة التحميل الفوري لا تؤدي إلى ظهور الطلب، بل يجب إغلاق جميع علامات التبويب). اختَر المجلد السابق وسيظهر الطلب الجديد.
الاستنتاجات
يُعدّ منح أذونات دائمة لواجهة File System Access API إحدى الميزات الأكثر طلبًا في واجهة برمجة التطبيقات، كما أنّ خطأ التنفيذ يحظى بشعبية كبيرة أيضًا، إذ أضافه العديد من المطوّرين إلى قائمة الميزات المفضّلة لديهم. من خلال توفير هذه الميزة للمطوّرين، وقبل كل شيء للمستخدمين، تم سد فجوة مهمة في الميزات مقارنةً بالتطبيقات الخاصة بمنصات معيّنة.
كلمة شكر
تمت مراجعة هذه المشاركة من قِبل كريستين هولينغسورث وأوستن سوليفان وراشيل أندرو.