สิทธิ์ถาวรสำหรับ File System Access API

ตอนนี้คุณสามารถรับสิทธิ์การเข้าถึงแบบอ่านและเขียนไฟล์และโฟลเดอร์อย่างถาวร โดยไม่ต้องให้สิทธิ์ซ้ำๆ โพสต์นี้จะอธิบายวิธีการทำงานของฟีเจอร์นี้ ก่อนที่จะเจาะลึกรายละเอียด เรามาสรุปสถานการณ์ปัจจุบันและปัญหาที่กำลังแก้ไขกันก่อน

ความท้าทายของวิธีปัจจุบัน

File System Access API ช่วยให้นักพัฒนาแอปเข้าถึงไฟล์ในฮาร์ดดิสก์ในเครื่องของผู้ใช้ในลักษณะการอ่านและ (ไม่บังคับ) การเขียนได้ แอปยอดนิยมแอปหนึ่ง (ในอีกหลายๆ แอป) ที่ใช้ API นี้คือ Visual Studio Code (VS Code) ซึ่งเป็น IDE ของ Microsoft ที่ทำงานในเบราว์เซอร์โดยตรง เมื่อเปิด VS Code คุณจะเห็นหน้าจอยินดีต้อนรับ ซึ่งคุณสามารถสร้างไฟล์ใหม่ หรือ เปิดไฟล์หรือโฟลเดอร์ที่มีอยู่ได้

หน้าจอต้อนรับของ Visual Studio Code

หากคลิกเปิดโฟลเดอร์แล้วเลือกโฟลเดอร์ใดโฟลเดอร์หนึ่งในฮาร์ดดิสก์ เบราว์เซอร์จะถามว่าคุณต้องการให้ VS Code มีสิทธิ์ดูโฟลเดอร์นี้หรือไม่

Visual Studio Code ขอสิทธิ์เข้าถึงเพื่อดู

เมื่อให้สิทธิ์เข้าถึงแล้ว คุณจะไปยังลำดับชั้นของโฟลเดอร์และเปิดไฟล์ใน โปรแกรมแก้ไขของ VS Code ได้ หากคุณแก้ไขไฟล์ใดก็ตาม เบราว์เซอร์จะถามว่าต้องการให้สิทธิ์เข้าถึงระดับแก้ไขแก่โฟลเดอร์หรือไม่

Visual Studio Code ขอสิทธิ์แก้ไข

หากอนุญาต ไอคอนไฟล์ในแถบที่อยู่จะเปลี่ยนไป และจะมีลูกศรลงเล็กๆ เพิ่มเข้ามา ซึ่งบ่งบอกว่าแอปมีสิทธิ์อ่านและเขียน หากต้องการเปลี่ยนสิทธิ์ ให้คลิกไอคอนแล้วคลิกนำสิทธิ์เข้าถึงออก เพื่อให้แอปแก้ไขไฟล์ไม่ได้อีกต่อไป

Visual Studio Code พร้อมข้อความแจ้งไอคอนแถบที่อยู่

สิทธิ์เข้าถึงจะคงอยู่จนกว่าคุณจะปิดแท็บสุดท้ายของต้นทาง หากคุณปิดแอป แล้วเปิดอีกครั้ง VS Code จะอนุญาตให้คุณทำต่อจากจุดที่ทำค้างไว้ เมื่อคลิกเปิดล่าสุด VS Code จะเสนอโฟลเดอร์ที่เปิดก่อนหน้านี้ ให้เปิดอีกครั้ง

Visual Studio Code แสดงไฟล์ที่เปิดล่าสุด

แต่แม้ว่าคุณจะเคยให้สิทธิ์เขียนไปยังโฟลเดอร์ก่อนหน้านี้แล้ว ตอนนี้คุณก็ต้องให้สิทธิ์เข้าถึงอีกครั้ง ซึ่งทำให้เหนื่อยล้าอย่างรวดเร็ว ก่อนที่จะเจาะลึกถึง โซลูชัน ซึ่งก็คือสิทธิ์แบบถาวรสำหรับ File System Access API เรามาดูกันก่อนว่า VS Code จัดการจดจำโฟลเดอร์ล่าสุดได้อย่างไร

Visual Studio Code ขอสิทธิ์เข้าถึงเพื่อแก้ไขหลังจากโหลดซ้ำ

ใน File System Access API การเข้าถึงไฟล์และโฟลเดอร์จะได้รับการจัดการผ่านออบเจ็กต์ FileSystemHandle ดังนี้ FileSystemFileHandle ออบเจ็กต์สำหรับไฟล์ และ FileSystemDirectoryHandle ออบเจ็กต์สำหรับโฟลเดอร์ (ไดเรกทอรี) ทั้ง 2 อย่างนี้สามารถจัดเก็บไว้ใน IndexedDB ได้ และ VS Code ก็ทำเช่นนี้ คุณดูได้โดยเปิด Chrome DevTools ในแท็บแอปพลิเคชัน ให้ไปที่ส่วน IndexedDB แล้ว เลือกตารางที่เกี่ยวข้อง vscode-filehandles-store ในฐานข้อมูล vscode-web-db

การแก้ไขข้อบกพร่องของเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ใน Visual Studio Code ซึ่งแสดงส่วน IndexedDB ที่มี FileSystemHandle ที่จัดเก็บไว้

วิธีใหม่: สิ่งที่จะเปลี่ยนแปลงและช่วงเวลา

Chrome กำลังเปิดตัวลักษณะการทำงานใหม่เพื่อให้ผู้ใช้เลือกให้สิทธิ์เข้าถึงไฟล์และโฟลเดอร์อย่างถาวรได้ โดยไม่ต้องแจ้งให้ผู้ใช้ทราบอีกเรื่อยๆ คุณจะสังเกตเห็นลักษณะการทำงานใหม่ได้ตั้งแต่ Chrome 122 เป็นต้นไป หากต้องการทดสอบก่อนหน้านี้ ให้สลับ 2 แฟล็ก chrome://flags/#file-system-access-persistent-permission และ chrome://flags/#one-time-permission เป็นเปิดใช้ตั้งแต่ Chrome 120 เป็นต้นไป

ประการแรก ลักษณะการทำงานใหม่ประกอบด้วยข้อความแจ้งให้สิทธิ์แบบใหม่ 3 ทาง ซึ่ง ช่วยให้ผู้ใช้เลือกให้สิทธิ์แอปเข้าถึงไฟล์และโฟลเดอร์ที่เลือกได้ในแต่ละ ครั้งที่เข้าชม

Visual Studio Code พร้อมข้อความแจ้งขอสิทธิ์แบบ 3 ทาง

พรอมต์ใหม่แบบ 3 ทางนี้มีตัวเลือกดังนี้

  • อนุญาตครั้งนี้: อนุญาตให้แอปเข้าถึงไฟล์สำหรับ เซสชันปัจจุบัน (ซึ่งตรงกับลักษณะการทำงานที่มีอยู่)
  • อนุญาตทุกครั้งที่เข้าชม: อนุญาตให้แอปมีสิทธิ์เข้าถึงแบบไม่จำกัดจนกว่าจะมีการเพิกถอนสิทธิ์เข้าถึง เมื่อแอปได้รับสิทธิ์เข้าถึงแบบถาวรแล้ว คุณจะเข้าถึงไฟล์และโฟลเดอร์ที่เปิดใหม่ได้แบบถาวรเช่นกัน
  • ไม่อนุญาต: ไม่อนุญาตให้แอปเข้าถึงไฟล์ (ซึ่ง สอดคล้องกับลักษณะการทำงานที่มีอยู่)

ประการที่ 2 ลักษณะการทำงานใหม่นี้จะทำให้มีส่วนใหม่ในการตั้งค่าเว็บไซต์ ซึ่งผู้ใช้จะเข้าถึงได้ผ่านไอคอนเปิดข้างปุ่มเปิด/ปิดการแก้ไขไฟล์

การตั้งค่าเว็บไซต์ Visual Studio Code พร้อมไอคอนการแก้ไขไฟล์

เมื่อคลิกไอคอนเปิดนี้ ระบบจะเปิดการตั้งค่าความเป็นส่วนตัวและความปลอดภัยสำหรับ แอปที่เป็นปัญหา ซึ่งผู้ใช้จะเห็นรายการของรายการสำหรับไฟล์และ โฟลเดอร์ทั้งหมดที่แอปมีสิทธิ์เข้าถึง คุณเพิกถอนสิทธิ์เข้าถึงเป็นรายรายการได้โดย คลิกไอคอนถังขยะ การนำสิทธิ์เข้าถึงต่อรายการออกหมายความว่าแอปยังคง ได้รับสิทธิ์เข้าถึงไฟล์โดยทั่วไป หากต้องการเพิกถอนสิทธิ์การเข้าถึงโดยทั่วไป ผู้ใช้สามารถ คลิกไอคอนในแถบที่อยู่ตามที่อธิบายไว้ก่อนหน้านี้

การตั้งค่าความเป็นส่วนตัวและความปลอดภัยของ Chrome สำหรับเว็บไซต์ vscode.dev

วิธีทริกเกอร์ลักษณะการทำงานใหม่

File System Access API จะไม่มีการเปลี่ยนแปลงใดๆ ที่ส่งผลต่อนักพัฒนาแอป หากต้องการเรียกใช้ลักษณะการทำงานใหม่ที่มีสิทธิ์แบบถาวร คุณสามารถทำได้ 3 วิธีโดยมีข้อกำหนดเบื้องต้นที่แตกต่างกันดังนี้

  1. ผู้ใช้ต้องให้สิทธิ์เข้าถึงไฟล์หรือโฟลเดอร์ (หรือไฟล์หรือโฟลเดอร์หลายรายการ) ในการเข้าชมต้นทางครั้งล่าสุด และแอปต้องจัดเก็บออบเจ็กต์ FileSystemHandle ที่เกี่ยวข้องใน IndexedDB เมื่อเข้าชมต้นทางครั้งถัดไป แอปจะต้องดึงออบเจ็กต์ FileSystemHandle ที่จัดเก็บไว้จาก IndexedDB แล้วเรียกใช้เมธอด FileSystemHandle.requestPermission() หากเป็นไปตามเงื่อนไขเบื้องต้นเหล่านี้ ระบบจะแสดงพรอมต์แบบ 3 ทางใหม่
  2. ต้นทางต้องเรียกใช้เมธอด FileSystemHandle.requestPermission() ใน FileSystemHandle ที่ได้รับสิทธิ์เข้าถึงก่อนหน้านี้ แต่ สิทธิ์เข้าถึงถูกเพิกถอนโดยอัตโนมัติเนื่องจากแท็บอยู่ใน เบื้องหลังเป็นระยะเวลาหนึ่ง (การเพิกถอนสิทธิ์อัตโนมัติจะทำงานตามตรรกะเดียวกันกับที่อธิบายไว้ในบทความสิทธิ์แบบครั้งเดียวใน Chrome) หากตรงตามเงื่อนไขเบื้องต้นเหล่านี้ ระบบจะแสดงพรอมต์แบบ 3 ทางใหม่
  3. ผู้ใช้ต้องติดตั้งแอป แอปที่ติดตั้งจะคงสิทธิ์ไว้โดยอัตโนมัติ เมื่อผู้ใช้ให้สิทธิ์เข้าถึง ในกรณีนี้ ระบบจะไม่แสดงข้อความแจ้งแบบ 3 ทาง แต่แอปจะได้รับลักษณะการทำงานใหม่ โดยค่าเริ่มต้น

ในกรณีแรกและกรณีที่ 2 พรอมต์จะแสดงรายการFileSystemHandle ออบเจ็กต์ทั้งหมดที่แอปเคยมีสิทธิ์เข้าถึง ไม่ใช่เฉพาะออบเจ็กต์ที่เรียกใช้เมธอด requestPermission() การทำงานจะสอดคล้องกับวิธีทำงานในสิทธิ์แบบครั้งเดียว หากผู้ใช้ปฏิเสธหรือปิดข้อความแจ้งมากกว่า 3 ครั้ง ข้อความแจ้งจะไม่ทริกเกอร์อีกต่อไป แต่จะแสดงข้อความแจ้งสิทธิ์ปกติแทน

ลองใช้ลักษณะการทำงานใหม่

หากคุณมี Chrome เวอร์ชันที่รองรับหรือตั้งค่า Flag ที่จำเป็นไว้ คุณจะทดสอบลักษณะการทำงานใหม่ใน VS Code บนเว็บได้ เปิดโฟลเดอร์และให้สิทธิ์เข้าถึง จากนั้นปิดแท็บแล้วเปิดอีกครั้ง แล้วคลิกเปิด ล่าสุด (โปรดทราบว่าการโหลดซ้ำทันทีจะใช้ไม่ได้สำหรับการทริกเกอร์ข้อความแจ้ง ต้องปิดแท็บทั้งหมด) เลือกโฟลเดอร์ก่อนหน้า แล้วข้อความแจ้งใหม่จะ ปรากฏขึ้น

บทสรุป

สิทธิ์แบบถาวรสำหรับ File System Access API เป็นหนึ่งในฟีเจอร์ที่มีการขอมากที่สุดของ API และข้อบกพร่องในการติดตั้งใช้งานก็ได้รับความนิยมอย่างมากเช่นกัน โดยมีนักพัฒนาแอปจำนวนมากที่ติดดาวไว้ การนำฟีเจอร์นี้มาสู่นักพัฒนาแอปและผู้ใช้เป็นอันดับแรกจะช่วยปิดช่องว่างของฟีเจอร์ที่สำคัญเมื่อเทียบกับแอปเฉพาะแพลตฟอร์ม

คำขอบคุณ

โพสต์นี้ได้รับการตรวจสอบโดย Christine Hollingsworth, Austin Sullivan และ Rachel Andrew