File System Access API के लिए स्थायी अनुमतियां

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

मौजूदा तरीके में आने वाली चुनौतियां

फ़ाइल सिस्टम ऐक्सेस एपीआई डेवलपर को उपयोगकर्ता की लोकल हार्ड डिस्क पर मौजूद फ़ाइलों को पढ़ने और (वैकल्पिक तौर पर) लिखने के तरीके से ऐक्सेस करने देता है. Visual Studio Code (VS Code) इस एपीआई का इस्तेमाल करने वाला एक लोकप्रिय ऐप्लिकेशन है. यह कई दूसरे ऐप्लिकेशन में से एक लोकप्रिय ऐप्लिकेशन है. यह Microsoft का IDE है, जो सीधे ब्राउज़र में काम करता है. VS Code खोलने पर, आपको वेलकम स्क्रीन दिखेगी. यहां नई फ़ाइल बनाई जा सकती है या कोई मौजूदा फ़ाइल या फ़ोल्डर खोला जा सकता है.

विज़ुअल स्टूडियो कोड की वेलकम स्क्रीन.

अगर फ़ोल्डर खोलें पर क्लिक करें और अपनी हार्ड डिस्क के फ़ोल्डर में से कोई एक चुनें, तो ब्राउज़र आपसे पूछेगा कि क्या आपको इस फ़ोल्डर के लिए VS Code को देखने का ऐक्सेस चाहिए.

विज़ुअल स्टूडियो कोड, जिसमें व्यू के ऐक्सेस की मांग की जा रही है.

ऐक्सेस देने के बाद, फ़ोल्डर के क्रम में नेविगेट किया जा सकता है और फ़ाइलों को VS Code के एडिटर में खोला जा सकता है. किसी भी फ़ाइल में बदलाव करने पर, ब्राउज़र आपसे पूछेगा कि आपको उस फ़ोल्डर में बदलाव करने का ऐक्सेस देना है या नहीं.

विज़ुअल स्टूडियो कोड, जिसमें बदलाव करने का ऐक्सेस मांगा जा रहा है.

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

पता बार के आइकॉन के साथ दिखने वाला विज़ुअल स्टूडियो कोड.

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

विज़ुअल स्टूडियो कोड, जो पिछली बार खोली गई फ़ाइलों को ऑफ़र करता है.

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

फिर से लोड करने के बाद विज़ुअल स्टूडियो कोड, जिसमें बदलाव करने के ऐक्सेस की मांग की जा रही है.

File System Access API में, फ़ाइलों और फ़ोल्डर के ऐक्सेस को FileSystemHandle ऑब्जेक्ट से मैनेज किया जाता है: FileSystemFileHandle फ़ाइलों के लिए ऑब्जेक्ट और FileSystemDirectoryHandle फ़ोल्डर (डायरेक्ट्री) के ऑब्जेक्ट. दोनों को IndexedDB में सेव किया जा सकता है. VS Code इसी काम को करता है. इसे देखने के लिए, Chrome DevTools को खोलें, ऐप्लिकेशन टैब में, IndexedDB सेक्शन पर जाएं. इसके बाद, vscode-web-dbडेटाबेस में इससे जुड़ी टेबल vscode-filehandles-store चुनें.

Chrome DevTools डीबग करने वाला विज़ुअल स्टूडियो कोड, जिसमें सेव किए गए FileSystemHandle के साथ IndexedDB सेक्शन दिख रहा है.

नया तरीका: कब और क्या बदल रहा है

Chrome में नई सुविधाएं लॉन्च की जा रही हैं. इसका इस्तेमाल करके, उपयोगकर्ता अपनी फ़ाइलों और फ़ोल्डर का ऐक्सेस हमेशा के लिए दे पाएंगे. साथ ही, उपयोगकर्ता को बार-बार अनुरोध करने की ज़रूरत नहीं होगी. Chrome 122 के बाद से, इस नई सुविधा की झलक देखी जा सकती है. पहले इसकी जांच करने के लिए, Chrome 120 और उसके बाद के वर्शन में, दो फ़्लैग chrome://flags/#file-system-access-persistent-permission और chrome://flags/#one-time-permission को चालू है पर टॉगल करें.

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

तीन तरीके से अनुमति के प्रॉम्प्ट के साथ विज़ुअल स्टूडियो कोड.

तीन तरीके वाले इस नए प्रॉम्प्ट में ये विकल्प हैं:

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

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

फ़ाइल में बदलाव करने के आइकॉन के साथ विज़ुअल स्टूडियो कोड वाली साइट की सेटिंग.

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

Vscode.dev साइट के लिए, Chrome की निजता और सुरक्षा सेटिंग.

नई कार्रवाई को कैसे ट्रिगर करें

File System Access API में, डेवलपर के लिए कोई बदलाव नहीं है. स्थायी अनुमतियों के साथ नई कार्रवाई को ट्रिगर करने के लिए, पहले से तय की गई अलग-अलग शर्तों को पूरा करने के तीन तरीके हैं:

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

पहले और दूसरे मामले में, प्रॉम्प्ट में उन सभी FileSystemHandle ऑब्जेक्ट की लिस्ट होती है जिनका ऐक्सेस ऐप्लिकेशन के पास पहले से था. इसमें सिर्फ़ वह नहीं शामिल है जिसके लिए requestPermission() तरीके को कॉल किया जा रहा है. एक बार मिलने वाली अनुमतियों के हिसाब से, यह उसी तरह काम करता है जिस तरह अगर उपयोगकर्ता तीन से ज़्यादा बार प्रॉम्प्ट को अस्वीकार या खारिज करता है, तो यह अब ट्रिगर नहीं होगा. इसके बजाय, अनुमति का सामान्य प्रॉम्प्ट दिखेगा.

नई सुविधा आज़माएं

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

मीटिंग में सामने आए नतीजे

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

लोगों का आभार

इस पोस्ट की समीक्षा क्रिस्टीन हॉलिंग्सवर्थ, ऑस्टिन सुलिवन, और रेचल एंड्रू ने की थी.