इंस्टॉल किए गए वेब ऐप्लिकेशन को फ़ाइल हैंडलर बनने की अनुमति दें

किसी ऐप्लिकेशन को ऑपरेटिंग सिस्टम में फ़ाइल हैंडलर के तौर पर रजिस्टर करें.

अब वेब ऐप्लिकेशन फ़ाइलों को पढ़ और लिख सकते हैं, इसलिए अगला चरण यह है कि डेवलपर इन वेब ऐप्लिकेशन को उन फ़ाइलों के लिए फ़ाइल हैंडलर के तौर पर बताएं जिन्हें उनके ऐप्लिकेशन बना और प्रोसेस कर सकते हैं. फ़ाइल मैनेज करने वाले एपीआई की मदद से, ठीक ऐसा किया जा सकता है. टेक्स्ट एडिटर ऐप्लिकेशन को फ़ाइल हैंडलर के तौर पर रजिस्टर करने और इसे इंस्टॉल करने के बाद, macOS पर .txt फ़ाइल पर राइट क्लिक किया जा सकता है. इसके बाद, "Get Info" चुनकर, ओएस को यह निर्देश दिया जा सकता है कि वह .txt फ़ाइलें, इस ऐप्लिकेशन से हमेशा डिफ़ॉल्ट तौर पर खोले.

फ़ाइल मैनेज करने वाले एपीआई के लिए, इस्तेमाल के सुझाए गए उदाहरण

इस एपीआई का इस्तेमाल करने वाली साइटों के उदाहरण:

  • Office ऐप्लिकेशन, जैसे कि टेक्स्ट एडिटर, स्प्रेडशीट ऐप्लिकेशन, और स्लाइड शो बनाने वाले ऐप्लिकेशन.
  • ग्राफ़िक एडिटर और ड्रॉइंग टूल.
  • वीडियो गेम लेवल एडिटर टूल.

फ़ाइल मैनेज करने वाले एपीआई को इस्तेमाल करने का तरीका

प्रोग्रेसिव एन्हैंसमेंट

फ़ाइल मैनेज करने वाले हर एपीआई को पॉलीफ़िल नहीं किया जा सकता. हालांकि, किसी वेब ऐप्लिकेशन से फ़ाइलें खोलने की सुविधा के दो अन्य तरीकों से हासिल की जा सकती है:

  • वेब शेयर टारगेट एपीआई डेवलपर को अपने ऐप्लिकेशन को शेयर टारगेट के तौर पर तय करने की सुविधा देता है, ताकि फ़ाइलों को ऑपरेटिंग सिस्टम की शेयर शीट से खोला जा सके.
  • फ़ाइल सिस्टम ऐक्सेस एपीआई को फ़ाइल खींचने और छोड़ने की सुविधा के साथ इंटिग्रेट किया जा सकता है, ताकि डेवलपर पहले से खोले गए ऐप्लिकेशन में छोड़ी गई फ़ाइलों को हैंडल कर सकें.

ब्राउज़र समर्थन

ब्राउज़र सहायता

  • 102
  • 102
  • x
  • x

सोर्स

सुविधा की पहचान करने की सुविधा

फ़ाइल हैंडलिंग एपीआई काम करता है या नहीं, यह देखने के लिए इनका इस्तेमाल करें:

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

फ़ाइल मैनेज करने वाले एपीआई का डिक्लेरेटिव हिस्सा

सबसे पहले, वेब ऐप्लिकेशन को अपने वेब ऐप्लिकेशन मेनिफ़ेस्ट में साफ़ तौर पर यह बताना होगा कि वे किस तरह की फ़ाइलों का इस्तेमाल कर सकते हैं. फ़ाइल हैंडलिंग एपीआई, वेब ऐप्लिकेशन मेनिफ़ेस्ट को "file_handlers" नाम की एक नई प्रॉपर्टी के साथ बढ़ाता है. यह प्रॉपर्टी कई तरह के फ़ाइल हैंडलर को स्वीकार करती है. फ़ाइल हैंडलर, इन प्रॉपर्टी वाला एक ऑब्जेक्ट है:

  • "action" प्रॉपर्टी, जो ऐप्लिकेशन के दायरे में आने वाले यूआरएल को उसकी वैल्यू के तौर पर दिखाती है.
  • "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"
    }
  ]
}

यह एक काल्पनिक ऐप्लिकेशन के लिए है, जो /open-csv पर कॉमा लगाकर अलग की गई वैल्यू (.csv) वाली फ़ाइलें, /open-svg पर स्केलेबल वेक्टर ग्राफ़िक (.svg) फ़ाइलें, और /open-graf पर एक्सटेंशन के तौर पर .grafr, .graf या .graph में से किसी के भी साथ बनाए गए Grafr फ़ाइल फ़ॉर्मैट को हैंडल करता है. पहले दो, एक ही क्लाइंट में खुलेंगे. अगर कई फ़ाइलें हैंडल की जा रही हैं, तो आखिरी दो क्लाइंट, कई क्लाइंट में खुलेंगे.

फ़ाइल मैनेज करने वाले एपीआई का ज़रूरी हिस्सा

ऐप्लिकेशन ने एलान कर दिया है कि वह किन-किन फ़ाइलों को, आम तौर पर स्कोप वाले यूआरएल के ज़रिए मैनेज कर सकता है, इसलिए उसे इनकमिंग फ़ाइलों के साथ कुछ करना होगा. यहीं से 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.
    }
  });
}

DevTools सहायता

यह लेख अभी किसी भी DevTools के लिए उपलब्ध नहीं है. हालांकि, मैंने सहायता पाने के लिए एक सुविधा का अनुरोध सबमिट किया है, ताकि उसे जोड़ा जा सके.

डेमो

मैंने Excalidraw, कार्टून-स्टाइल ड्रॉइंग वाले ऐप्लिकेशन में फ़ाइल मैनेज करने की सुविधा जोड़ दी है. इसकी जांच करने के लिए, आपको पहले Excalidraw इंस्टॉल करना होगा. इसके बाद, जब इससे कोई फ़ाइल बनाई जाती है और उसे अपने फ़ाइल सिस्टम में किसी जगह स्टोर किया जाता है, तो दो बार क्लिक करके या राइट क्लिक करके, फ़ाइल को खोला जा सकता है. इसके बाद, संदर्भ मेन्यू में "Excalidraw" को चुना जा सकता है. सोर्स कोड में, लागू करने की प्रोसेस देखें.

macOS की फ़ाइंडर विंडो में, Excalidraw फ़ाइल मौजूद है.
अपने ऑपरेटिंग सिस्टम के फ़ाइल एक्सप्लोरर में, किसी फ़ाइल पर दो बार क्लिक करें या राइट क्लिक करें.
जिस फ़ाइल को '...के साथ खोलें...' हाइलाइट किया गया होता है उस पर राइट क्लिक करने पर संदर्भ मेन्यू दिखता है.
Excalidraw, .excalidraw फ़ाइलों के लिए डिफ़ॉल्ट फ़ाइल हैंडलर है.

सुरक्षा

Chrome की टीम ने फ़ाइल हैंडलिंग एपीआई को डिज़ाइन और लागू करने के लिए, वेब प्लैटफ़ॉर्म की बेहतर सुविधाओं का ऐक्सेस कंट्रोल करना सेक्शन में बताए गए मुख्य सिद्धांतों को ध्यान में रखा है. इन सिद्धांतों में उपयोगकर्ता कंट्रोल, पारदर्शिता, और एर्गोनॉमिक्स शामिल हैं.

अनुमतियां, अनुमतियों को बनाए रखना, और फ़ाइल हैंडलर से जुड़े अपडेट

उपयोगकर्ता का भरोसा और उपयोगकर्ताओं की फ़ाइलों की सुरक्षा को पक्का करने के लिए, फ़ाइल मैनेज करने वाले एपीआई जब कोई फ़ाइल खोलेगा, तो PWA को फ़ाइल देखने से पहले अनुमति का अनुरोध दिखेगा. अनुमति का यह प्रॉम्प्ट उपयोगकर्ता के फ़ाइल खोलने के लिए PWA को चुनने के तुरंत बाद दिखेगा, ताकि PWA का इस्तेमाल करके फ़ाइल खोलने की कार्रवाई के साथ-साथ अनुमति को आसानी से जोड़ा जा सके. इससे उपयोगकर्ता को उस फ़ाइल को समझने में आसानी होगी और उसे काम का बनाया जाएगा.

यह अनुमति तब तक दिखती रहेगी, जब तक उपयोगकर्ता साइट के लिए, फ़ाइल मैनेज करने के लिए अनुमति दें या ब्लॉक करें पर क्लिक न करे. इसके अलावा, यह प्रॉम्प्ट को तीन बार अनदेखा कर देता है. इसके बाद, Chromium इस अनुमति पर पाबंदी लगा देता है और इसे ब्लॉक कर देता है. चुनी गई सेटिंग, PWA को बंद करने और फिर से खोलने के दौरान बनी रहेगी.

"file_handlers" सेक्शन में मेनिफ़ेस्ट अपडेट और बदलावों का पता चलने पर, अनुमतियां रीसेट हो जाएंगी.

अटैक वेक्टर की एक बड़ी कैटगरी है. वेबसाइटों को फ़ाइलों को ऐक्सेस करने की अनुमति देकर, कई तरह के अटैक वेक्टर खोले जाते हैं. इनके बारे में, File System Access API के लेख में बताया गया है. फ़ाइल सिस्टम ऐक्सेस एपीआई के ऊपर फ़ाइल मैनेज करने वाला एपीआई, सुरक्षा से जुड़ी जो अतिरिक्त सुविधा देता है वह किसी वेब ऐप्लिकेशन में दिखाए गए फ़ाइल पिकर के बजाय, ऑपरेटिंग सिस्टम के बिल्ट-इन यूज़र इंटरफ़ेस (यूआई) से कुछ फ़ाइलों को ऐक्सेस देने की सुविधा है.

इस बात का भी जोखिम अब भी बना रहता है कि उपयोगकर्ता, वेब ऐप्लिकेशन को गलती से किसी फ़ाइल का ऐक्सेस दे दें. हालांकि, आम तौर पर यह माना जाता है कि फ़ाइल को खोलने पर, वह ऐप्लिकेशन उस फ़ाइल को पढ़ सकता है और/या उसमें बदलाव कर सकता है. इसलिए, इंस्टॉल किए गए ऐप्लिकेशन में उपयोगकर्ता की फ़ाइल खोलने का साफ़ विकल्प, जैसे कि "...से खोलें..." संदर्भ मेन्यू की मदद से, ऐप्लिकेशन में लोगों के भरोसे को दिखाया जा सकता है.

डिफ़ॉल्ट हैंडलर की चुनौतियां

इसका अपवाद तब है, जब होस्ट सिस्टम पर दिए गए फ़ाइल टाइप के लिए कोई ऐप्लिकेशन नहीं होता. इस मामले में, कुछ होस्ट ऑपरेटिंग सिस्टम, रजिस्टर किए गए नए हैंडलर को उस फ़ाइल टाइप के लिए, डिफ़ॉल्ट हैंडलर पर अपने-आप प्रमोट कर सकते हैं. इसके लिए, उपयोगकर्ता की कोई कार्रवाई नहीं की जाएगी. इसका मतलब यह है कि अगर उपयोगकर्ता उस तरह की किसी फ़ाइल पर दो बार क्लिक करता है, तो वह रजिस्टर किए गए वेब ऐप्लिकेशन में अपने-आप खुल जाएगी. ऐसे होस्ट ऑपरेटिंग सिस्टम पर जब उपयोगकर्ता एजेंट यह तय करता है कि फ़ाइल टाइप के लिए कोई मौजूदा डिफ़ॉल्ट हैंडलर नहीं है, तो उपयोगकर्ता की सहमति के बिना, फ़ाइल के कॉन्टेंट को गलती से किसी वेब ऐप्लिकेशन पर भेजने से रोकने के लिए, अनुमति का साफ़ तौर पर अनुरोध करना ज़रूरी हो सकता है.

उपयोगकर्ता कंट्रोल

इस खास जानकारी में बताया गया है कि ब्राउज़र को हर उस साइट को रजिस्टर नहीं करना चाहिए जो फ़ाइलों को फ़ाइल हैंडलर के तौर पर हैंडल कर सकती है. इसके बजाय, फ़ाइल मैनेज करने के रजिस्ट्रेशन को इंस्टॉल करने से रोका जाना चाहिए और उपयोगकर्ता की साफ़ तौर पर पुष्टि के बिना ऐसा नहीं होना चाहिए. खास तौर पर तब, जब किसी साइट को डिफ़ॉल्ट हैंडलर बनाना हो. .json जैसे मौजूदा एक्सटेंशन को हाइजैक करने के बजाय, जिनके लिए उपयोगकर्ता के पास पहले से ही एक डिफ़ॉल्ट हैंडलर रजिस्टर किया गया है, साइटों को अपना खुद का एक्सटेंशन बनाने पर विचार करना चाहिए.

पारदर्शिता

सभी ऑपरेटिंग सिस्टम, उपयोगकर्ताओं को मौजूदा फ़ाइल असोसिएशन को बदलने की अनुमति देते हैं. यह ब्राउज़र के दायरे से बाहर है.

सुझाव/राय दें या शिकायत करें

Chrome टीम, फ़ाइल मैनेज करने वाले एपीआई के साथ आपके अनुभवों के बारे में जानना चाहती है.

हमें इस एपीआई के डिज़ाइन के बारे में बताएं

क्या एपीआई में ऐसा कुछ है जो आपकी उम्मीद के मुताबिक काम नहीं करता? या ऐसा नहीं है कि अपना आइडिया लागू करने के लिए, ऐसे तरीके या प्रॉपर्टी मौजूद नहीं हैं जिनकी ज़रूरत आपको है? क्या सुरक्षा मॉडल के बारे में आपका कोई सवाल या टिप्पणी है?

  • इससे जुड़े GitHub रेपो के बारे में कोई खास जानकारी फ़ाइल करें या किसी मौजूदा समस्या में अपने विचार जोड़ें.

लागू करने से जुड़ी समस्या की शिकायत करें

क्या आपको Chrome को लागू करने में कोई गड़बड़ी मिली? या क्या इसे लागू करने की प्रक्रिया खास जानकारी से अलग है?

  • new.crbug.com पर गड़बड़ी की शिकायत करें. आप ज़्यादा से ज़्यादा जानकारी शामिल करें. इसे फिर से बनाने के आसान निर्देश दें और कॉम्पोनेंट बॉक्स में UI>Browser>WebAppInstalls>FileHandling डालें. Glitch का इस्तेमाल करके, तुरंत और आसान तरीकों से उसे शेयर किया जा सकता है.

एपीआई के साथ काम करता है

क्या आपको फ़ाइल मैनेज करने वाला एपीआई इस्तेमाल करना है? आपकी सार्वजनिक सहायता से Chrome टीम को सुविधाओं को प्राथमिकता देने में मदद मिलती है और अन्य ब्राउज़र वेंडर को यह पता चलता है कि उनकी सहायता करना कितना ज़रूरी है.

  • WICG चर्चा थ्रेड पर बताएं कि आपको इसे कैसे इस्तेमाल करना है.
  • हैशटैग #FileHandling का इस्तेमाल करके @ChromiumDev को एक ट्वीट भेजें और हमें बताएं कि आप उसका इस्तेमाल कहां और कैसे कर रहे हैं.

मददगार लिंक

स्वीकार हैं

फ़ाइल हैंडलिंग एपीआई के बारे में एरिक विलिगर्स, जे हैरिस, और रेम्स ख़ौरी ने तय किया. इस लेख की समीक्षा जो मेडली ने की है.