אפשר לאפליקציות אינטרנט מותקנות להיות handlers של קבצים

רישום אפליקציה כ-handler של קבצים במערכת ההפעלה.

עכשיו, כשאפליקציות אינטרנט יכולות לקרוא ולכתוב קבצים, השלב ההגיוני הבא הוא לאפשר למפתחים להצהיר על אפליקציות האינטרנט האלה כרכיבי handler של קבצים בקבצים שהאפליקציות שלהם יכולות ליצור ולעבד. בעזרת ה-API לטיפול בקבצים אפשר לעשות את זה בדיוק. אחרי שרושמים אפליקציה לעריכת טקסט כ-handler של קבצים ואחרי שמתקינים אותה, אפשר ללחוץ לחיצה ימנית על קובץ .txt ב-macOS ולבחור באפשרות Get Info (קבלת מידע) כדי להורות למערכת ההפעלה לפתוח קובצי .txt תמיד באמצעות האפליקציה הזו כברירת מחדל.

תרחישים לדוגמה לשימוש ב-File Treatment API

דוגמאות לאתרים שעשויים להשתמש בממשק API זה:

  • אפליקציות של Office כמו עורכי טקסט, אפליקציות של גיליונות אלקטרוניים ויוצרים של מצגות.
  • כלי עריכה גרפיים וכלי שרטוט.
  • כלי עריכה ברמת משחק הווידאו.

איך משתמשים ב-File Treatment API

שיפור הדרגתי

לא ניתן להשתמש ב-Polyed API בנפרד עבור API לטיפול בקבצים. עם זאת, ניתן להשיג את הפונקציונליות של פתיחת קבצים באמצעות אפליקציית אינטרנט בשני אמצעים נוספים:

  • ה-Web Share Target API מאפשר למפתחים להגדיר את האפליקציה שלהם כיעד לשיתוף, כדי שניתן יהיה לפתוח קבצים מגיליון השיתוף של מערכת ההפעלה.
  • אפשר לשלב את File System Access API באמצעות גרירה ושחרור של קבצים, כדי שהמפתחים יוכלו לטפל בקבצים שהושמטו באפליקציה שכבר נפתחה.

תמיכת דפדפן

תמיכה בדפדפן

  • 102
  • 102
  • x
  • x

מקור

זיהוי תכונות

כדי לבדוק אם ה-File Treatment API נתמך, השתמשו בפקודה:

if ('launchQueue' in window && 'files' in LaunchParams.prototype) {
  // The File Handling API is supported.
}

החלק המוצהר ב-File Treatment API

בשלב הראשון, אפליקציות אינטרנט צריכות לתאר באופן מוצהר בקובץ המניפסט של אפליקציית האינטרנט באיזה סוג של קבצים הן יכולות לטפל. ה-API לטיפול ב-File מרחיב את המניפסט של אפליקציית האינטרנט באמצעות מאפיין חדש בשם "file_handlers", שמקבל מגוון של רכיבי handler של קבצים. גורם handler של קבצים הוא אובייקט עם המאפיינים הבאים:

  • נכס "action" שמפנה לכתובת URL שבהיקף של האפליקציה בתור הערך שלה.
  • מאפיין "accept" עם אובייקט מסוג MIME כמפתחות ורשימות של סיומות קבצים כערכים שלהם.
  • נכס "icons" עם מגוון סמלים של ImageResource. מערכות הפעלה מסוימות מאפשרות לשיוך של סוג קובץ להציג סמל שאינו רק סמל האפליקציה המשויך, אלא סמל מיוחד שקשור לשימוש בסוג הקובץ הזה באפליקציה.
  • נכס "launch_type" שמגדיר אם יש לפתוח מספר קבצים בלקוח יחיד או במספר לקוחות. ערך ברירת המחדל הוא "single-client". אם המשתמש פותח מספר קבצים ול-handler של הקבצים נוספו הערות באמצעות "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 Treatment 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 בתפריט ההקשר. תוכלו לראות את ההטמעה בקוד המקור.

החלון לחיפוש של macOS עם קובץ החרגה.
לוחצים לחיצה כפולה או לוחצים לחיצה ימנית על קובץ בסייר הקבצים של מערכת ההפעלה.
תפריט ההקשר שמופיע כשלוחצים לחיצה ימנית על קובץ שבו מודגש הפריט 'פתיחה באמצעות...'.
Excalidraw הוא ה-handler שמוגדר כברירת מחדל לקבצים ב-.excalidraw.

אבטחה

צוות Chrome תכנן והטמיע את ה-File Treatment API באמצעות עקרונות הליבה שהוגדרו ב-Controlling Access to Power Platform features (שליטה בגישה לתכונות מתקדמות של פלטפורמת אינטרנט), כולל בקרת משתמשים, שקיפות וארגונומיה.

הרשאות, שמירת הרשאות ועדכוני handler של קבצים

כדי לשמור על אמון המשתמשים ולהבטיח את בטיחות הקבצים, כש-File Treatment API פותח קובץ, תוצג בקשה להרשאה לפני ש-PWA יוכל להציג קובץ. בקשת ההרשאה תוצג מיד אחרי שהמשתמש יבחר ב-PWA כדי לפתוח קובץ, כך שההרשאה תקושר היטב לפעולה של פתיחת קובץ באמצעות ה-PWA, כך שתהיה מובנת ורלוונטית יותר.

ההרשאה הזו תוצג בכל פעם שהמשתמש ילחץ על אישור או חסימה של הטיפול בקבצים באתר, או יתעלם מהבקשה שלוש פעמים (לאחר מכן Chromium יטיל אמברגו ויחסום את ההרשאה הזו). ההגדרה שנבחרה תישאר בתוקף לאורך הסגירה והפתיחה מחדש של ה-PWA.

כשיזוהו עדכונים ושינויים במניפסט בקטע "file_handlers", ההרשאות יאופסו.

יש קטגוריה גדולה של וקטורי תקיפה שנפתחים על ידי מתן אפשרות לאתרים לגשת לקבצים. תוכלו לקרוא על כך במאמר בנושא File System Access API. יכולת האבטחה הנוספת של File Treatment API מספקת ב-File System Access API היא היכולת להעניק גישה לקבצים מסוימים באמצעות ממשק המשתמש המובנה של מערכת ההפעלה, במקום דרך הכלי לבחירת קבצים המוצג על ידי אפליקציית אינטרנט.

עדיין יש סיכון שמשתמשים עלולים להעניק לאפליקציית אינטרנט גישה לקובץ בלי כוונה על ידי פתיחה שלו. עם זאת, באופן כללי מובן שפתיחת קובץ מאפשרת לאפליקציה שבה הוא נפתח לקרוא ו/או לשנות את הקובץ. לכן, אפשר לקרוא את הבחירה המפורשת של משתמש לפתוח קובץ באפליקציה מותקנת, כמו דרך תפריט ההקשר "פתיחה באמצעות...", כאות אמון מספיק באפליקציה.

אתגרי ברירת המחדל של handler

היוצא מן הכלל הוא כאשר אין אפליקציות במערכת המארחת לסוג קובץ נתון. במקרה כזה, מערכות הפעלה מסוימות מארחות עשויות לקדם באופן אוטומטי את ה-handler הרשום החדש ל-handler שמוגדר כברירת מחדל עבור סוג הקובץ הזה בשקט וללא כל התערבות של המשתמש. המשמעות היא שאם משתמש לוחץ לחיצה כפולה על קובץ מהסוג הזה, הקובץ ייפתח אוטומטית באפליקציית האינטרנט הרשומה. במערכות הפעלה מארחות כאלה, כשסוכן המשתמש קובע שאין handler קיים שמוגדר כברירת מחדל לסוג הקובץ, יכול להיות שיהיה צורך להציג הרשאה מפורשת כדי למנוע שליחה בטעות של תוכן הקובץ לאפליקציית אינטרנט ללא הסכמת המשתמש.

בקרת משתמשים

במפרט מצוין שדפדפנים לא צריכים לרשום כל אתר שיכול לטפל בקבצים כ-handler של קבצים. במקום זאת, הרישום של טיפול בקבצים צריך להיות מוגבל מאחורי ההתקנה, ואף פעם לא יקרה בלי אישור מפורש מהמשתמש, במיוחד אם אתר יהפוך ל-handler שמוגדר כברירת מחדל. במקום לפרוץ לתוספים קיימים כמו .json, שסביר להניח שלמשתמש כבר יש handler שמוגדר כברירת מחדל, כדאי לאתרים ליצור תוספים משלהם.

שקיפות

כל מערכות ההפעלה מאפשרות למשתמשים לשנות את שיוכי הקבצים הנוכחיים. זאת מחוץ להיקף של הדפדפן.

משוב

צוות Chrome רוצה לשמוע על החוויה שלך בשימוש ב-File Treatment API.

לספר לנו על עיצוב ה-API

האם יש משהו ב-API שלא פועל כמצופה? או האם חסרים שיטות או מאפיינים שאתם צריכים ליישם את הרעיון? יש לכם שאלה או הערה לגבי מודל האבטחה?

  • שלחו בעיה במפרט במאגר GitHub המתאים, או הוסיפו את המחשבות שלכם לבעיה קיימת.

דיווח על בעיה בהטמעה

האם מצאת באג בהטמעה של Chrome? או שההטמעה שונה מהמפרט?

  • אפשר לדווח על באג בכתובת new.crbug.com. חשוב לכלול כמה שיותר פרטים, הוראות פשוטות לשחזור, ולהזין UI>Browser>WebAppInstalls>FileHandling בתיבה Components (רכיבים). גליץ' הוא כלי מעולה לשיתוף גיבויים מהירים וקלים.

הבעת תמיכה ב-API

האם אתם מתכננים להשתמש ב-File Treatment API? התמיכה הציבורית שלכם עוזרת לצוות של Chrome לתעדף תכונות, ומראה לספקי דפדפנים אחרים עד כמה חשוב לתמוך בהן.

קישורים שימושיים

אישורים

ה-API לטיפול בקבצים צוין על ידי אריק וויליגרס, ג'יי האריס וRaymes Khoury. המאמר הזה נקרא על ידי Joe Medley.