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

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

ปัญหาเกี่ยวกับวิธีการปัจจุบัน

File System Access API ช่วยให้นักพัฒนาแอปเข้าถึงไฟล์ในฮาร์ดดิสก์ในเครื่องของผู้ใช้ในรูปแบบการอ่านและเขียน (ไม่บังคับ) แอปยอดนิยมอย่างหนึ่ง (ในบรรดาแอปอื่นๆ อีกมากมาย) ที่ใช้ API นี้คือ Visual Studio Code (VS IDE) ซึ่งเป็น 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

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

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

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

ประการแรก ลักษณะการทำงานแบบใหม่ประกอบด้วยข้อความแจ้งสิทธิ์แบบ 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