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

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

मौजूदा तरीके से जुड़ी चुनौतियां

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

Visual Studio Code की वेलकम स्क्रीन.

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

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

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

Visual Studio Code, बदलाव करने का ऐक्सेस मांग रहा है.

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

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

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

Visual Studio Code में, पिछली बार खोली गई फ़ाइलें दिख रही हैं.

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

रीफ़्रेश करने के बाद, Visual Studio Code में बदलाव करने का ऐक्सेस मांगा जा रहा है.

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

Chrome DevTools में, Visual Studio Code को डीबग किया जा रहा है. इसमें, सेव किए गए FileSystemHandle के साथ IndexedDB सेक्शन दिख रहा है.

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

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

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

तीन तरह की अनुमति देने के लिए प्रॉम्प्ट वाला Visual Studio Code.

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

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

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

फ़ाइल में बदलाव करने वाले आइकॉन के साथ, Visual Studio Code की साइट सेटिंग.

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

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

नए व्यवहार को ट्रिगर करने का तरीका

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

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

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

नया बिहेवियर आज़माना

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

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

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

लोगों का आभार

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