تسجيل تطبيق كمعالج ملفات في نظام التشغيل
بعد أن أصبحت تطبيقات الويب قادرة على قراءة الملفات وكتابتها، فإنّ الخطوة المنطقية التالية هي السماح للمطوّرين بتحديد تطبيقات الويب هذه على أنّها معالجات للملفات التي يمكن لتطبيقاتهم إنشاؤها ومعالجتها. تتيح لك واجهة File Handling API تنفيذ ذلك بالضبط. بعد تسجيل تطبيق محرر نصوص كمعالج ملفات وبعد تثبيته، يمكنك النقر بزر الماوس الأيمن على ملف .txt على جهاز macOS واختيار "الحصول على المعلومات" (Get Info) ثم إخبار نظام التشغيل بأنّه يجب دائمًا فتح ملفات .txt باستخدام هذا التطبيق كإعداد تلقائي.
حالات الاستخدام المقترَحة لواجهة برمجة تطبيقات معالجة الملفات
في ما يلي أمثلة على المواقع الإلكترونية التي قد تستخدم واجهة برمجة التطبيقات هذه:
- تطبيقات Office، مثل أدوات تحرير النصوص وتطبيقات جداول البيانات وأدوات إنشاء عروض الشرائح
- أدوات الرسم وبرامج تعديل الرسومات
- أدوات تعديل مستويات ألعاب الفيديو
كيفية استخدام File Handling API
التحسين التدريجي
لا يمكن تعويض واجهة برمجة تطبيقات معالجة الملفات في حد ذاتها. ومع ذلك، يمكن تحقيق وظيفة فتح الملفات باستخدام تطبيق ويب من خلال طريقتين أخريين:
- تتيح Web Share Target API للمطوّرين تحديد تطبيقاتهم كهدف للمشاركة، ما يتيح فتح الملفات من ورقة المشاركة في نظام التشغيل.
- يمكن دمج واجهة برمجة التطبيقات File System Access API مع ميزة سحب الملفات وإفلاتها، ما يتيح للمطوّرين معالجة الملفات التي تم إفلاتها في التطبيق المفتوح حاليًا.
دعم المتصفح
رصد الميزات
للتحقّق مما إذا كانت واجهة برمجة التطبيقات File Handling API متوافقة، استخدِم ما يلي:
if ('launchQueue' in window && 'files' in LaunchParams.prototype) {
// The File Handling API is supported.
}
الجزء التعريفي من File Handling API
كخطوة أولى، يجب أن تصف تطبيقات الويب بشكل تعريفي في بيان تطبيق الويب
أنواع الملفات التي يمكنها التعامل معها. توسّع واجهة File Handling API بيان تطبيق الويب من خلال إضافة السمة الجديدة "file_handlers" التي تقبل مصفوفة من معالجات الملفات. معالج الملفات هو عنصر يتضمّن الخصائص التالية:
- سمة
"action"تشير إلى عنوان URL ضمن نطاق التطبيق كقيمة لها. - تمثّل هذه السمة
"accept"كائنًا لأنواع MIME كمفاتيح وقوائم لامتدادات الملفات كقيم. - سمة
"icons"تتضمّن مصفوفة من رموزImageResourceتسمح بعض أنظمة التشغيل بربط نوع ملف بعرض رمز ليس فقط رمز التطبيق المرتبط، بل رمز خاص مرتبط باستخدام نوع الملف هذا مع التطبيق. - تمثّل هذه السمة
"launch_type"ما إذا كان يجب فتح ملفات متعددة في برنامج واحد أو في عدة برامج. القيمة التلقائية هي"single-client". إذا فتح المستخدم ملفات متعددة وكان معالج الملفات مزودًا بالتعليق التوضيحي"multiple-clients"باعتباره"launch_type"، سيتم تشغيل أكثر من تطبيق واحد، وفي كل عملية تشغيل، ستتضمّن مصفوفةLaunchParams.files(راجِع المزيد أدناه) عنصرًا واحدًا فقط.
يجب أن يوضّح المثال أدناه، الذي يعرض المقتطف ذي الصلة فقط من بيان تطبيق الويب، ما يلي:
{
"file_handlers": [
{
"action": "/open-csv",
"accept": {
"text/csv": [".csv"]
},
"icons": [
{
"src": "csv-icon.png",
"sizes": "256x256",
"type": "image/png"
}
],
"launch_type": "single-client"
},
{
"action": "/open-svg",
"accept": {
"image/svg+xml": ".svg"
},
"icons": [
{
"src": "svg-icon.png",
"sizes": "256x256",
"type": "image/png"
}
],
"launch_type": "single-client"
},
{
"action": "/open-graf",
"accept": {
"application/vnd.grafr.graph": [".grafr", ".graf"],
"application/vnd.alternative-graph-app.graph": ".graph"
},
"icons": [
{
"src": "graf-icon.png",
"sizes": "256x256",
"type": "image/png"
}
],
"launch_type": "multiple-clients"
}
]
}
هذا المثال مخصّص لتطبيق افتراضي يعالج ملفات قيم مفصولة بفواصل (.csv) في /open-csv، وملفات رسومات متجهة قابلة للتوسيع (.svg) في /open-svg، وتنسيق ملف Grafr وهمي
مع أي من .grafr أو .graf أو .graph كلاحقة في /open-graf. سيتم فتح أول ملفَين في عميل واحد، وسيتم فتح الملف الأخير في عدة عملاء إذا كان يتم التعامل مع ملفات متعددة.
الجزء الإلزامي من File Handling API
بعد أن يوضّح التطبيق الملفات التي يمكنه التعامل معها في عنوان URL النطاق النظري، عليه أن ينفّذ إجراءً إلزاميًا على الملفات الواردة. وهنا يأتي دور launchQueue. للوصول إلى الملفات التي تم إطلاقها، يجب أن يحدّد الموقع الإلكتروني مستهلكًا window.launchQueueللكائن. يتم وضع عمليات الإطلاق في قائمة انتظار إلى أن يتم التعامل معها من خلال المستهلك المحدّد، والذي يتم استدعاؤه مرة واحدة بالضبط لكل عملية إطلاق. بهذه الطريقة، يتم التعامل مع كل عملية تشغيل، بغض النظر عن وقت تحديد المستهلك.
if ('launchQueue' in window && 'files' in LaunchParams.prototype) {
launchQueue.setConsumer((launchParams) => {
// Nothing to do when the queue is empty.
if (!launchParams.files.length) {
return;
}
for (const fileHandle of launchParams.files) {
// Handle the file.
}
});
}
الدعم في "أدوات مطوّري البرامج"
لا تتوفّر أدوات مطوّلين في الوقت الحالي، ولكنّني أرسلت طلب ميزة لإتاحتها.
عرض توضيحي
لقد أضفتُ ميزة معالجة الملفات إلى Excalidraw، وهو تطبيق للرسم بأسلوب كرتوني. ولاختبارها، عليك أولاً تثبيت Excalidraw. عند إنشاء ملف باستخدام هذا التطبيق وتخزينه في مكان ما على نظام الملفات، يمكنك فتح الملف من خلال النقر عليه مرّتين أو النقر بزر الماوس الأيمن ثم اختيار "Excalidraw" في قائمة السياق. يمكنك الاطّلاع على عملية التنفيذ في الرمز المصدر.
.excalidraw.
الأمان
صمَّم فريق Chrome واجهة File Handling API ونفَّذها باستخدام المبادئ الأساسية المحدّدة في التحكّم في الوصول إلى الميزات الفعّالة لمنصة الويب، بما في ذلك تحكّم المستخدم والشفافية وبيئة العمل المريحة.
الأذونات واستمرار الأذونات وتعديلات معالج الملفات
لضمان اكتساب ثقة المستخدمين والحفاظ على أمان ملفاتهم، سيظهر طلب الحصول على إذن قبل أن يتمكّن تطبيق ويب تقدّمي من عرض ملف عند فتحه باستخدام File Handling API. سيظهر طلب الإذن هذا مباشرةً بعد أن يختار المستخدم فتح ملف باستخدام تطبيق الويب التقدّمي، ما يربط الإذن بشكل وثيق بإجراء فتح ملف باستخدام تطبيق الويب التقدّمي، ما يجعله أكثر قابلية للفهم وملاءمةً.
سيظهر هذا الإذن في كل مرة إلى أن ينقر المستخدم على السماح أو الحظر للتعامل مع الملفات في الموقع الإلكتروني، أو يتجاهل الطلب ثلاث مرات (وبعدها سيحظر Chromium هذا الإذن). سيظل الإعداد المحدّد ساريًا عند إغلاق تطبيق الويب التقدّمي وإعادة فتحه.
عند تعديل ملف البيان ورصد تغييرات في قسم "file_handlers"، ستتم إعادة ضبط الأذونات.
المشاكل المتعلّقة بالملفات
هناك فئة كبيرة من متجهات الهجوم التي يتم فتحها من خلال السماح للمواقع الإلكترونية بالوصول إلى الملفات. تم توضيح هذه الأذونات في المقالة حول File System Access API. تتمثّل الميزة الإضافية المتعلّقة بالأمان التي توفّرها File Handling API مقارنةً بواجهة File System Access API في إمكانية منح إذن الوصول إلى ملفات معيّنة من خلال واجهة المستخدم المضمّنة في نظام التشغيل، بدلاً من منح الإذن من خلال أداة اختيار الملفات التي يعرضها تطبيق ويب.
ومع ذلك، يبقى هناك خطر من أن يمنح المستخدمون تطبيق ويب إذن الوصول إلى ملف عن غير قصد من خلال فتحه. ومع ذلك، من المفهوم عمومًا أنّ فتح ملف يسمح للتطبيق الذي تم فتحه به بقراءة هذا الملف و/أو تعديله. وبالتالي، يمكن اعتبار اختيار المستخدم الصريح لفتح ملف في تطبيق مثبَّت، مثلاً من خلال قائمة السياق "فتح باستخدام..."، إشارة كافية إلى الثقة في التطبيق.
مشاكل المعالج التلقائي
ويستثنى من ذلك الحالات التي لا تتوفّر فيها تطبيقات على نظام المضيف لنوع ملف معيّن. في هذه الحالة، قد ترفع بعض أنظمة التشغيل المضيفة تلقائيًا مستوى المعالج المسجّل حديثًا إلى المعالج التلقائي لنوع الملف هذا بدون أي تدخّل من المستخدم. وهذا يعني أنّه إذا نقر المستخدم مرّتين على ملف من هذا النوع، سيتم فتحه تلقائيًا في تطبيق الويب المسجّل. وفي أنظمة التشغيل المضيفة هذه، عندما يحدّد وكيل المستخدم أنّه لا يوجد معالج تلقائي حالي لنوع الملف، قد يكون من الضروري عرض طلب الحصول على إذن صريح لتجنُّب إرسال محتوى ملف إلى تطبيق ويب بدون موافقة المستخدم عن طريق الخطأ.
تحكّم المستخدم
توضّح المواصفات أنّ المتصفّحات يجب ألا تسجّل كل موقع إلكتروني يمكنه التعامل مع الملفات كمعالج ملفات. بدلاً من ذلك، يجب أن يكون تسجيل معالجة الملفات محميًا من خلال عملية التثبيت، ويجب ألا يتم بدون تأكيد صريح من المستخدم، خاصةً إذا كان الموقع الإلكتروني سيصبح المعالج التلقائي. بدلاً من اختراق الإضافات الحالية، مثل .json، التي من المحتمل أنّ المستخدم لديه معالج تلقائي مسجّل لها، يجب أن تفكّر المواقع الإلكترونية في إنشاء إضافاتها الخاصة.
الشفافية
تسمح جميع أنظمة التشغيل للمستخدمين بتغيير عمليات الربط الحالية بين الملفات. يقع ذلك خارج نطاق المتصفّح.
الملاحظات
يريد فريق Chrome معرفة تجاربك مع File Handling API.
أخبِرنا عن تصميم واجهة برمجة التطبيقات
هل هناك أي شيء في واجهة برمجة التطبيقات لا يعمل على النحو المتوقّع؟ أو هل هناك طرق أو سمات ناقصة تحتاج إلى تنفيذ فكرتك؟ هل لديك سؤال أو تعليق حول نموذج الأمان؟
- يمكنك الإبلاغ عن مشكلة في المواصفات في مستودع GitHub ذي الصلة، أو إضافة أفكارك إلى مشكلة حالية.
الإبلاغ عن مشكلة في عملية التنفيذ
هل عثرت على خطأ في تنفيذ Chrome؟ أو هل يختلف التنفيذ عن المواصفات؟
- يمكنك الإبلاغ عن خطأ على new.crbug.com. احرص على تضمين أكبر قدر ممكن من التفاصيل وتعليمات بسيطة لإعادة إنتاج الخطأ، وأدخِل
UI>Browser>WebAppInstalls>FileHandlingفي المربّع المكوّنات.
إظهار الدعم لواجهة برمجة التطبيقات
هل تخطّط لاستخدام File Handling API؟ يساعد دعمك العلني فريق Chrome في تحديد أولويات الميزات، ويوضّح لمورّدي المتصفّحات الآخرين مدى أهمية توفيرها.
- شارِك كيف تخطّط لاستخدامه في سلسلة محادثات WICG Discourse.
- يمكنك إرسال تغريدة إلى @ChromiumDev باستخدام الهاشتاغ
#FileHandlingوإخبارنا بمكان وكيفية استخدامك له.
روابط مفيدة
- شرح علني
- عرض توضيحي لواجهة File Handling API | رمز العرض التوضيحي لواجهة File Handling API
- خطأ التتبُّع في Chromium
- إدخال ChromeStatus.com
- مكوّن Blink:
UI>Browser>WebAppInstalls>FileHandling - مراجعة TAG
- موقف Mozilla بشأن المعايير
الإقرارات
تم تحديد مواصفات File Handling API من قِبل إريك ويليغرز وجاي هاريس وريميس خوري. راجع هذه المقالة جو ميدلي.