ตอนนี้คุณมีสิทธิ์เข้าถึงไฟล์และโฟลเดอร์แบบถาวรเพื่ออ่านและเขียนได้โดยไม่ต้องให้สิทธิ์ซ้ำๆ โพสต์นี้จะอธิบายวิธีการทำงานของฟีเจอร์นี้ ก่อนเจาะลึกรายละเอียด เราขอสรุปสถานการณ์ปัจจุบันและปัญหาที่กำลังแก้ไข
ปัญหาเกี่ยวกับวิธีการปัจจุบัน
File System Access API ช่วยให้นักพัฒนาแอปเข้าถึงไฟล์ในฮาร์ดดิสก์ในเครื่องของผู้ใช้ในรูปแบบการอ่านและเขียน (ไม่บังคับ) แอปยอดนิยมอย่างหนึ่ง (ในบรรดาแอปอื่นๆ อีกมากมาย) ที่ใช้ API นี้คือ Visual Studio Code (VS IDE) ซึ่งเป็น IDE ของ Microsoft ที่ทำงานในเบราว์เซอร์โดยตรง เมื่อเปิด VS Code คุณจะเห็นหน้าจอยินดีต้อนรับ ซึ่งคุณสามารถสร้างไฟล์ใหม่ หรือเปิดไฟล์หรือโฟลเดอร์ที่มีอยู่
หากคุณคลิกเปิดโฟลเดอร์และเลือกโฟลเดอร์ใดโฟลเดอร์หนึ่งในฮาร์ดดิสก์ เบราว์เซอร์จะถามว่าคุณต้องการให้ VS Code มีสิทธิ์ดูโฟลเดอร์นี้หรือไม่
เมื่อให้สิทธิ์เข้าถึงแล้ว คุณจะไปยังส่วนต่างๆ ของลําดับชั้นโฟลเดอร์และเปิดไฟล์ในเครื่องมือแก้ไขของ VS Code ได้ หากคุณแก้ไขไฟล์ใดไฟล์หนึ่ง เบราว์เซอร์จะถามว่าคุณต้องการให้สิทธิ์แก้ไขโฟลเดอร์หรือไม่
หากคุณอนุญาต ไอคอนไฟล์ในแถบที่อยู่จะเปลี่ยนไปและมีการเพิ่มลูกศรลงเล็กๆ ซึ่งบ่งบอกว่าแอปมีสิทธิ์อ่านและเขียน หากต้องการเปลี่ยนสิทธิ์ ให้คลิกไอคอนแล้วคลิกนำสิทธิ์เข้าถึงออกเพื่อให้แอปแก้ไขไฟล์ไม่ได้อีกต่อไป
สิทธิ์เข้าถึงจะคงอยู่จนกว่าคุณจะปิดแท็บสุดท้ายของต้นทาง หากปิดแอปแล้วเปิดอีกครั้ง VS Code จะคล้ายกับให้คุณทำงานต่อจากจุดที่ทำค้างไว้ เมื่อคลิกเปิดรายการล่าสุด VS Code จะแสดงโฟลเดอร์ที่เปิดไว้ก่อนหน้านี้เพื่อให้เปิดอีกครั้ง
แต่แม้ว่าคุณจะให้สิทธิ์การเขียนในโฟลเดอร์ไว้ก่อนหน้านี้แล้ว คุณก็จะต้องให้สิทธิ์เข้าถึงอีกครั้ง ซึ่งทำให้เหนื่อยล้าได้อย่างรวดเร็ว ก่อนจะเจาะลึกถึงวิธีแก้ปัญหา ซึ่งก็คือสิทธิ์ถาวรสำหรับ File System Access API นั้น VS Code จำโฟลเดอร์ล่าสุดได้อย่างไร
ใน File System Access API การจัดการการเข้าถึงไฟล์และโฟลเดอร์จะดำเนินการผ่าน
FileSystemHandle
ออบเจ็กต์ ดังนี้
FileSystemFileHandle
ออบเจ็กต์สำหรับไฟล์ และ
FileSystemDirectoryHandle
ออบเจ็กต์สำหรับโฟลเดอร์ (ไดเรกทอรี) ข้อมูลทั้ง 2 ประเภทสามารถจัดเก็บไว้ใน IndexedDB และนี่คือสิ่งที่ VS Code ทำ คุณดูข้อมูลนี้ได้โดยการเปิด Chrome DevTools ในแท็บแอปพลิเคชัน ให้ไปที่ส่วน IndexedDB แล้วเลือกตารางที่เกี่ยวข้อง vscode-filehandles-store
ในฐานข้อมูล vscode-web-db
วิธีการใหม่: สิ่งที่จะเปลี่ยนแปลงและเวลาที่จะเปลี่ยนแปลง
Chrome กำลังเปิดตัวลักษณะการทำงานแบบใหม่เพื่อให้ผู้ใช้เลือกให้สิทธิ์เข้าถึงไฟล์และโฟลเดอร์อย่างถาวรได้ ซึ่งจะช่วยหลีกเลี่ยงการแจ้งเตือนผู้ใช้ซ้ำๆ
ลักษณะการทำงานแบบใหม่นี้จะเริ่มมีผลตั้งแต่ Chrome เวอร์ชัน 122 หากต้องการทดสอบก่อน ให้เปิดใช้ Flag 2 รายการต่อไปนี้จาก Chrome เวอร์ชัน 120 เป็นต้นไป โดยตั้งค่าเป็นเปิดใช้chrome://flags/#file-system-access-persistent-permission
chrome://flags/#one-time-permission
ประการแรก ลักษณะการทำงานแบบใหม่ประกอบด้วยข้อความแจ้งสิทธิ์แบบ 3 ทางใหม่ซึ่งผู้ใช้สามารถเลือกให้สิทธิ์แอปเข้าถึงไฟล์และโฟลเดอร์ที่เลือกในแต่ละครั้งที่เข้าชม
ข้อความแจ้งแบบ 3 ทางใหม่นี้มีตัวเลือกต่อไปนี้
- อนุญาตในครั้งนี้: อนุญาตให้แอปเข้าถึงไฟล์สำหรับเซสชันปัจจุบัน (การดำเนินการนี้จะสอดคล้องกับลักษณะการทำงานที่มีอยู่)
- อนุญาตทุกครั้งที่เข้าชม: อนุญาตให้แอปมีสิทธิ์เข้าถึงแบบไม่มีกำหนด เว้นแต่จะมีการเพิกถอนสิทธิ์เข้าถึง เมื่อแอปได้รับสิทธิ์เข้าถึงแบบถาวรแล้ว ไฟล์และโฟลเดอร์ที่เปิดใหม่จะเข้าถึงได้แบบถาวรด้วย
- ไม่อนุญาต: ไม่อนุญาตให้แอปเข้าถึงไฟล์ (การดำเนินการนี้จะสอดคล้องกับลักษณะการทำงานที่มีอยู่)
ประการที่ 2 ลักษณะการทำงานแบบใหม่จะมีส่วนใหม่ในการตั้งค่าเว็บไซต์ ซึ่งผู้ใช้เข้าถึงได้ผ่านไอคอนเปิดใช้งานข้างปุ่มเปิด/ปิดการแก้ไขไฟล์
เมื่อคลิกไอคอนเปิดใช้งานนี้ ระบบจะเปิดการตั้งค่าความเป็นส่วนตัวและความปลอดภัยสำหรับแอปที่เป็นปัญหา ซึ่งผู้ใช้จะเห็นรายการรายการสำหรับไฟล์และโฟลเดอร์ทั้งหมดที่แอปมีสิทธิ์เข้าถึง คุณสามารถเพิกถอนสิทธิ์เข้าถึงทีละรายการได้โดยคลิกไอคอนถังขยะ การนำสิทธิ์เข้าถึงต่อรายการออกหมายความว่าแอปจะยังคงได้รับสิทธิ์เข้าถึงไฟล์โดยทั่วไป หากต้องการเพิกถอนสิทธิ์เข้าถึงโดยทั่วไป ผู้ใช้สามารถคลิกไอคอนในแถบที่อยู่ตามที่อธิบายไว้ก่อนหน้านี้
วิธีเรียกใช้ลักษณะการทํางานใหม่
File System Access API ไม่มีการเปลี่ยนแปลงที่แสดงต่อนักพัฒนาซอฟต์แวร์ หากต้องการทริกเกอร์ลักษณะการทำงานใหม่ด้วยสิทธิ์ถาวร คุณต้องทำตามเงื่อนไขเบื้องต้นที่แตกต่างกัน 3 วิธีดังนี้
- ผู้ใช้ต้องให้สิทธิ์แก่ไฟล์หรือโฟลเดอร์ (หรือไฟล์หรือโฟลเดอร์หลายรายการ) ในการเข้าชมแหล่งที่มาครั้งล่าสุด และแอปต้องจัดเก็บออบเจ็กต์
FileSystemHandle
ที่เกี่ยวข้องไว้ใน IndexedDB เมื่อเข้าชมต้นทางครั้งถัดไป แอปต้องดึงข้อมูลออบเจ็กต์FileSystemHandle
ที่เก็บไว้รายการใดรายการหนึ่งจาก IndexedDB แล้วเรียกใช้เมธอดFileSystemHandle.requestPermission()
ของออบเจ็กต์นั้น หากเป็นไปตามเงื่อนไขเบื้องต้นเหล่านี้ ระบบจะแสดงข้อความแจ้งแบบ 3 ทางใหม่ - ต้นทางต้องเรียกใช้เมธอด
FileSystemHandle.requestPermission()
ในFileSystemHandle
ที่ได้รับสิทธิ์เข้าถึงก่อนหน้านี้ แต่ถูกเพิกถอนสิทธิ์เข้าถึงโดยอัตโนมัติเนื่องจากแท็บทำงานอยู่เบื้องหลังเป็นเวลานาน (การเพิกถอนสิทธิ์อัตโนมัติจะทำงานตามตรรกะเดียวกับที่อธิบายไว้ในบทความสิทธิ์แบบครั้งเดียวใน Chrome) หากเป็นไปตามเงื่อนไขเบื้องต้นเหล่านี้ ระบบจะแสดงข้อความแจ้งแบบ 3 ทางใหม่ - ผู้ใช้ต้องติดตั้งแอปไว้แล้ว แอปที่ติดตั้งไว้จะเก็บสิทธิ์ไว้โดยอัตโนมัติเมื่อผู้ใช้ให้สิทธิ์เข้าถึง ในกรณีนี้ ระบบจะไม่แสดงข้อความแจ้งแบบ 3 ทาง แต่แอปจะได้รับลักษณะการทำงานใหม่โดยค่าเริ่มต้น
ในกรณีแรกและที่ 2 พรอมต์จะแสดงรายการFileSystemHandle
วัตถุทั้งหมดที่แอปเคยเข้าถึงได้ ไม่ใช่แค่รายการที่เรียกใช้เมธอดrequestPermission()
การดำเนินการนี้จะสอดคล้องกับวิธีการทํางานของสิทธิ์แบบครั้งเดียว กล่าวคือ หากผู้ใช้ปฏิเสธหรือปิดข้อความแจ้งมากกว่า 3 ครั้ง ระบบจะไม่แสดงข้อความแจ้งอีกต่อไป และระบบจะแสดงข้อความแจ้งสิทธิ์ปกติแทน
ลองใช้ลักษณะการทำงานแบบใหม่
หากใช้ Chrome เวอร์ชันที่รองรับหรือตั้งค่า Flag ที่จำเป็นไว้ คุณจะทดสอบลักษณะการทำงานแบบใหม่ใน VS Code บนเว็บได้ เปิดโฟลเดอร์และมอบสิทธิ์เข้าถึง จากนั้นปิดแท็บแล้วเปิดอีกครั้ง แล้วคลิกเปิดรายการล่าสุด (โปรดทราบว่าการโหลดซ้ำทันทีจะไม่ทริกเกอร์ข้อความแจ้ง คุณต้องปิดแท็บทั้งหมด) เลือกโฟลเดอร์ก่อนหน้าแล้วข้อความแจ้งใหม่จะปรากฏขึ้น หากต้องการดูเฟรมเวิร์กการทดสอบที่น้อยลง ให้ดูการสาธิตการเข้าถึงระบบไฟล์แบบถาวร และดูซอร์สโค้ด
สรุป
สิทธิ์ถาวรสําหรับ File System Access API เป็นหนึ่งในฟีเจอร์ที่ขอมากที่สุดของ API และข้อบกพร่องในการใช้งานก็ได้รับความนิยมอย่างมากเช่นกัน โดยมีนักพัฒนาแอปจำนวนมากติดดาวไว้ การนำฟีเจอร์นี้มาสู่มือของนักพัฒนาแอป และที่สำคัญที่สุดคือมือของผู้ใช้ จะช่วยปิดช่องว่างสำคัญด้านฟีเจอร์เมื่อเทียบกับแอปเฉพาะแพลตฟอร์ม
บริการรับรองคำให้การ
โพสต์นี้ผ่านการตรวจสอบโดย Christine Hollingsworth, Austin Sullivan และ Rachel Andrew