ตอนนี้คุณสามารถรับสิทธิ์การเข้าถึงแบบอ่านและเขียนไฟล์และโฟลเดอร์อย่างถาวร โดยไม่ต้องให้สิทธิ์ซ้ำๆ โพสต์นี้จะอธิบายวิธีการทำงานของฟีเจอร์นี้ ก่อนที่จะเจาะลึกรายละเอียด เรามาสรุปสถานการณ์ปัจจุบันและปัญหาที่กำลังแก้ไขกันก่อน
ความท้าทายของวิธีปัจจุบัน
File System Access API ช่วยให้นักพัฒนาแอปเข้าถึงไฟล์ในฮาร์ดดิสก์ในเครื่องของผู้ใช้ในลักษณะการอ่านและ (ไม่บังคับ) การเขียนได้ แอปยอดนิยมแอปหนึ่ง (ในอีกหลายๆ แอป) ที่ใช้ API นี้คือ Visual Studio Code (VS Code) ซึ่งเป็น 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 เป็นต้นไป หากต้องการทดสอบก่อนหน้านี้ ให้สลับ 2 แฟล็ก chrome://flags/#file-system-access-persistent-permission
และ chrome://flags/#one-time-permission
เป็นเปิดใช้ตั้งแต่ Chrome 120 เป็นต้นไป
ประการแรก ลักษณะการทำงานใหม่ประกอบด้วยข้อความแจ้งให้สิทธิ์แบบใหม่ 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