اکنون راهی برای دسترسی مداوم خواندن و نوشتن به فایلها و پوشهها بدون نیاز به دادن مجوزهای مکرر وجود دارد. این پست نحوه عملکرد آن را توضیح می دهد. قبل از فرو رفتن در جزئیات، خلاصه ای سریع از وضعیت موجود و مشکلی که در حال حل شدن است.
چالش های با روش فعلی
File System Access API به توسعه دهندگان این امکان را می دهد که به فایل های موجود در هارد دیسک محلی کاربر به روش خواندن و (در صورت تمایل) نوشتن دسترسی داشته باشند. یکی از برنامه های محبوب (در میان بسیاری دیگر ) که از این API استفاده می کند، Visual Studio Code (VS Code) است، IDE مایکروسافت که مستقیماً در مرورگر اجرا می شود. وقتی VS Code را باز میکنید، با یک صفحه خوشآمدگویی مواجه میشوید که در آن میتوانید یک فایل جدید ایجاد کنید، یا یک فایل یا یک پوشه موجود را باز کنید.
اگر روی Open Folder کلیک کنید و یکی از پوشههای موجود در هارد دیسک خود را انتخاب کنید، مرورگر از شما میپرسد که آیا میخواهید VS Code به این پوشه دسترسی داشته باشد یا خیر.
پس از اعطای دسترسی، میتوانید سلسله مراتب پوشه را پیمایش کنید و فایلها را در ویرایشگر VS Code باز کنید. اگر در هر یک از فایلها تغییری ایجاد کنید، مرورگر از شما میپرسد که آیا میخواهید به پوشه دسترسی ویرایش بدهید یا خیر.
اگر اجازه دهید، نماد فایل در نوار آدرس تغییر می کند و یک فلش کوچک به سمت پایین اضافه می شود که نشان می دهد برنامه مجوز خواندن و نوشتن دارد. برای تغییر مجوزها، روی نماد و سپس حذف دسترسی کلیک کنید تا برنامه دیگر نتواند فایلها را ویرایش کند.
دسترسی تا زمانی که آخرین برگه مبدا را ببندید ادامه دارد. اگر برنامه را ببندید و دوباره آن را باز کنید، VS Code به شما امکان میدهد از همان جایی که متوقف کردهاید ادامه دهید. وقتی روی Open Recent کلیک میکنید، VS Code پوشهای که قبلاً باز شده را برای باز کردن مجدد ارائه میکند.
اما حتی اگر قبلاً به پوشه اجازه نوشتن داده اید، اکنون باید دوباره اجازه دسترسی بدهید. این خیلی زود خسته می شود. قبل از فرو رفتن در راه حل، یعنی مجوزهای دائمی برای File System Access API، VS Code چگونه حتی پوشه های اخیر را به خاطر می آورد؟
در File System Access API، دسترسی به فایلها و پوشهها از طریق اشیاء FileSystemHandle
مدیریت میشود: اشیاء FileSystemFileHandle
برای فایلها، و اشیاء FileSystemDirectoryHandle
برای پوشهها (دایرکتوریها). هر دو را می توان در IndexedDB ذخیره کرد و این دقیقاً همان کاری است که VS Code انجام می دهد. میتوانید با باز کردن Chrome DevTools، در تب Application به بخش IndexedDB بروید و جدول مربوطه vscode-filehandles-store
در پایگاه داده vscode-web-db
انتخاب کنید.
روش جدید: چه چیزی و چه زمانی در حال تغییر است
کروم در حال راهاندازی رفتار جدیدی است تا به کاربران امکان میدهد به صورت اختیاری به فایلها و پوشههای خود دسترسی دائمی بدهند و از درخواست مجدد دائماً از کاربر اجتناب کنند. رفتار جدید را میتوان از Chrome 122 مشاهده کرد. برای آزمایش زودتر، از Chrome 120، دو پرچم chrome://flags/#file-system-access-persistent-permission
و chrome://flags/#one-time-permission
را تغییر دهید. chrome://flags/#one-time-permission
به Enabled .
در مرحله اول، رفتار جدید شامل یک درخواست مجوز سه طرفه جدید است که به صورت اختیاری به کاربران اجازه می دهد در هر بازدید به برنامه ها اجازه دسترسی به فایل ها و پوشه های انتخابی را بدهند.
این اعلان سه طرفه جدید دارای گزینه های زیر است:
- Allow this time: به برنامه اجازه میدهد به فایلهای جلسه جاری دسترسی داشته باشد. (این با رفتار موجود مطابقت دارد.)
- Allow on every visit: به برنامه اجازه می دهد تا دسترسی نامحدود داشته باشد مگر اینکه دسترسی لغو شود. هنگامی که به برنامه دسترسی دائمی داده شد، فایلها و پوشههای تازه باز شده نیز دائماً در دسترس خواهند بود.
- اجازه نمی دهد: به برنامه اجازه دسترسی به فایل ها را نمی دهد. (این با رفتار موجود مطابقت دارد.)
ثانیاً، رفتار جدید مستلزم بخش جدیدی در تنظیمات سایت است که کاربران می توانند از طریق نماد راه اندازی در کنار کلید ویرایش فایل به آن دسترسی پیدا کنند.
این نماد راهاندازی، وقتی روی آن کلیک میشود، تنظیمات حریم خصوصی و امنیتی را برای برنامه مورد نظر باز میکند، جایی که کاربر فهرستی از موارد را برای همه فایلها و پوشههایی که برنامه به آنها دسترسی دارد میبیند. دسترسی را می توان بر اساس هر مورد با کلیک کردن روی نماد سطل زباله لغو کرد. حذف دسترسی برای هر مورد به این معنی است که برنامه همچنان می تواند به طور کلی به فایل ها دسترسی داشته باشد. برای لغو دسترسی به طور کلی، کاربر می تواند روی نماد موجود در نوار آدرس، همانطور که قبلا توضیح داده شد، کلیک کند.
چگونه رفتار جدید را تحریک کنیم
هیچ تغییری برای توسعهدهندگان در File System Access API وجود ندارد. برای شروع رفتار جدید با مجوزهای مداوم، سه راه با پیش شرط های مختلف وجود دارد که باید رعایت شوند:
- کاربر باید مجوز یک فایل یا پوشه (یا چندین فایل یا پوشه) را در آخرین بازدید از یک مبدا داده باشد و برنامه باید اشیاء
FileSystemHandle
مربوطه را در IndexedDB ذخیره کرده باشد. پس از بازدید بعدی از مبدا، برنامه باید هر یک از اشیاءFileSystemHandle
ذخیره شده را از IndexedDB بازیابی کرده باشد و سپس متدFileSystemHandle.requestPermission()
خود را فراخوانی کرده باشد. اگر این پیش شرط ها برآورده شوند، اعلان سه طرفه جدید نشان داده می شود. - مبدا باید متد
FileSystemHandle.requestPermission()
را در یکFileSystemHandle
که قبلاً به آن دسترسی داده شده بود، فراخوانی کرده باشد، اما دسترسی آن به دلیل اینکه برگه برای مدتی پسزمینه است، به طور خودکار لغو شده است. (لغو خودکار مجوز بر اساس همان منطقی عمل می کند که در مقاله مجوزهای یکبار مصرف در Chrome توضیح داده شده است.) اگر این پیش شرط ها برآورده شوند، درخواست سه طرفه جدید نشان داده می شود. - کاربر باید برنامه را نصب کرده باشد. برنامههای نصبشده بهطور خودکار پس از اعطای دسترسی به کاربر، مجوزها را حفظ میکنند. در این حالت، اعلان سه طرفه نشان داده نخواهد شد، در عوض برنامه به طور پیش فرض رفتار جدید را دریافت می کند.
در مورد اول و دوم، دستور تمام اشیاء FileSystemHandle
را که برنامه قبلاً به آنها دسترسی داشته است، فهرست میکند، نه فقط مواردی که متد requestPermission()
برای آن فراخوانی میشود. مطابق با روش کار در مجوزهای یکبار مصرف ، اگر کاربر درخواست را بیش از سه بار رد یا رد کند، دیگر راه اندازی نمی شود و در عوض درخواست مجوز معمولی نشان داده می شود.
رفتار جدید را امتحان کنید
اگر نسخه پشتیبانی از Chrome دارید یا پرچمهای لازم را تنظیم کردهاید، میتوانید رفتار جدید را در VS Code در وب آزمایش کنید. یک پوشه را باز کنید و به آن دسترسی بدهید، سپس برگه را ببندید و دوباره آن را باز کنید و روی Open اخیر کلیک کنید (توجه داشته باشید که بارگیری مجدد فوری برای راه اندازی درخواست کار نمی کند، همه برگه ها باید بسته شوند). پوشه قبلی را انتخاب کنید و اعلان جدید نشان داده می شود. برای یک مورد آزمایشی کمتر، نسخه ی نمایشی دسترسی به سیستم فایل پایدار را بررسی کنید و کد منبع آن را بررسی کنید .
نتیجه گیری
مجوزهای دائمی برای File System Access API یکی از ویژگی های درخواستی API است و اشکال پیاده سازی نیز بسیار محبوب است و بسیاری از توسعه دهندگان آن را ستاره دار می کنند. با در اختیار قرار دادن این ویژگی در دست توسعه دهندگان، و مهمتر از همه، دستان کاربران، اکنون شکاف مهمی از ویژگی ها در مقایسه با برنامه های خاص پلتفرم بسته شده است.
قدردانی ها
این پست توسط کریستین هالینگزورث ، آستین سالیوان و ریچل اندرو بازبینی شده است.