อนุญาตให้ PWA ที่ติดตั้งจัดการลิงก์ที่ใช้โปรโตคอลที่เฉพาะเจาะจงเพื่อประสบการณ์การใช้งานที่ผสานรวมมากขึ้น
เบื้องหลังของสคีมา (หรือโปรโตคอล)
Uniform Resource Identifier (URI) คือลำดับอักขระที่กะทัดรัดซึ่งระบุทรัพยากรที่เป็นนามธรรมหรือทางกายภาพ URI แต่ละรายการจะเริ่มต้นด้วยชื่อ สคีมาที่อ้างอิงถึงข้อกำหนดสำหรับการ กำหนดตัวระบุภายในสคีมานั้น ด้วยเหตุนี้ ไวยากรณ์ URI จึงเป็นระบบการตั้งชื่อแบบรวมและขยายได้ ซึ่งข้อกำหนดของแต่ละสคีมาอาจจำกัดไวยากรณ์และความหมายของตัวระบุที่ใช้สคีมานั้นเพิ่มเติม สคีมาเรียกอีกอย่างว่าโปรโตคอล คุณดูตัวอย่างสคีมาได้
tel:+1-816-555-1212
mailto:Jane.Doe@example.com
news:comp.infosystems.www.servers.unix
https://web.dev/
คำว่า Uniform Resource Locator (URL) หมายถึงส่วนย่อยของ URI ที่นอกเหนือจากการระบุทรัพยากรแล้ว ยังมีวิธีการค้นหาทรัพยากรโดยอธิบายกลไกการเข้าถึงหลัก (เช่น ตำแหน่งในเครือข่าย)
เบื้องหลังของเมธอด registerProtocolHandler()
เมธอด
registerProtocolHandler()
Navigatorที่มีเนื้อหาที่ปลอดภัยเท่านั้นช่วยให้เว็บไซต์ลงทะเบียนความสามารถในการเปิดหรือจัดการสคีมา URL ที่เฉพาะเจาะจงได้ ดังนั้น เว็บไซต์จึงต้องเรียกเมธอดดังนี้ navigator.registerProtocolHandler(scheme, url) พารามิเตอร์ 2 รายการมีคำจำกัดความดังนี้
scheme: สตริงที่มีโปรโตคอลที่เว็บไซต์ต้องการจัดการurl: สตริงที่มี URL ของตัวแฮนเดิล URL นี้ต้องมี%sเป็นตัวยึดตำแหน่งที่จะแทนที่ด้วย URL ที่หลีกแล้วซึ่งจะได้รับการจัดการ
สคีมาต้องเป็นหนึ่งใน
สคีมาที่อยู่ในรายการที่อนุญาต
(เช่น mailto, bitcoin หรือ magnet) หรือเริ่มต้นด้วย web+ ตามด้วยตัวอักษร ASCII ตัวเล็กอย่างน้อย 1 ตัวขึ้นไปหลังจากคำนำหน้า web+ เช่น web+coffee
ตัวอย่างขั้นตอนการทำงานที่ชัดเจนมีดังนี้
- ผู้ใช้เข้าชมเว็บไซต์ที่
https://coffeeshop.example.com/ซึ่งทำการเรียกnavigator.registerProtocolHandler('web+coffee', 'coffee?type=%s') - ต่อมาขณะเข้าชม
https://randomsite.example.com/ผู้ใช้คลิกลิงก์ เช่น<a href="web+coffee:latte-macchiato">All about latte macchiato</a> - การดำเนินการนี้จะทำให้เบราว์เซอร์ไปยัง URL ต่อไปนี้
https://coffeeshop.example.com/coffee?type=web%2Bcoffee%3A%2F%2Flatte-macchiatoจากนั้นสตริงการค้นหาที่ถอดรหัส URL แล้วจะมีลักษณะเป็น?type=web+coffee://latte-macchiato
เกี่ยวกับการจัดการโปรโตคอล
กลไก การลงทะเบียนตัวแฮนเดิลโปรโตคอลของ URL สำหรับ PWA ในปัจจุบันมีวัตถุประสงค์เพื่อเสนอการลงทะเบียนตัวแฮนเดิลโปรโตคอลเป็นส่วนหนึ่งของการติดตั้ง PWA ผ่านไฟล์ Manifest หลังจากลงทะเบียน PWA เป็นตัวแฮนเดิลโปรโตคอลแล้ว เมื่อผู้ใช้คลิกลิงก์ไฮเปอร์ลิงก์ที่มีสคีมาที่เฉพาะเจาะจง เช่น mailto , bitcoin หรือ web+music จากเบราว์เซอร์หรือแอปที่เฉพาะเจาะจงของแพลตฟอร์ม PWA ที่ลงทะเบียนไว้จะเปิดขึ้นและรับ URL โปรดทราบว่าทั้งการลงทะเบียนตามไฟล์ Manifest ที่เสนอและการลงทะเบียน registerProtocolHandler() แบบเดิมมีบทบาทที่คล้ายกันมากในทางปฏิบัติ ขณะเดียวกันก็ยังคงเปิดโอกาสให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่เสริมกันได้
- ความคล้ายคลึงกัน ได้แก่ ข้อกำหนดเกี่ยวกับรายการสคีมาที่อนุญาตให้ลงทะเบียน รวมถึงชื่อและรูปแบบของพารามิเตอร์ เป็นต้น
- ความแตกต่างในการลงทะเบียนตามไฟล์ Manifest นั้นเล็กน้อย แต่อาจมีประโยชน์ในการปรับปรุงประสบการณ์การใช้งานสำหรับผู้ใช้ PWA ตัวอย่างเช่น การลงทะเบียน PWA ตามไฟล์ Manifest อาจไม่จำเป็นต้องให้ผู้ใช้ดำเนินการเพิ่มเติมนอกเหนือจากการติดตั้ง PWA ที่ผู้ใช้เริ่ม
กรณีการใช้งาน
- ใน PWA สำหรับประมวลผลคำ ผู้ใช้ในเอกสารจะเห็นลิงก์ไปยังงานนำเสนอ เช่น
web+presentations://deck2378465เมื่อผู้ใช้คลิกลิงก์ PWA สำหรับงานนำเสนอจะเปิดขึ้นโดยอัตโนมัติในขอบเขตที่ถูกต้องและแสดงชุดสไลด์ - ในแอปแชทที่เฉพาะเจาะจงของแพลตฟอร์ม ผู้ใช้ในข้อความแชทจะได้รับลิงก์ไปยัง URL
magnetเมื่อคลิกลิงก์ PWA สำหรับ Torrent ที่ติดตั้งไว้จะเปิดขึ้นและเริ่มดาวน์โหลด - ผู้ใช้ได้ติดตั้ง PWA สำหรับการสตรีมเพลงไว้ เมื่อเพื่อนแชร์ลิงก์ไปยังเพลง เช่น
web+music://songid=1234&time=0:13และผู้ใช้คลิกลิงก์ดังกล่าว PWA สำหรับการสตรีมเพลงจะ เปิดขึ้นโดยอัตโนมัติในหน้าต่างแบบสแตนด์อโลน
วิธีใช้การลงทะเบียนตัวแฮนเดิลโปรโตคอลของ URL สำหรับ PWA
API สำหรับการลงทะเบียนตัวแฮนเดิลโปรโตคอลของ URL ได้รับการออกแบบตาม navigator.registerProtocolHandler() อย่างใกล้ชิด เพียงแต่ครั้งนี้ข้อมูลจะถูกส่งผ่านแบบประกาศโดยใช้
ไฟล์ Manifest ของเว็บแอปในพร็อพเพอร์ตี้ใหม่ที่เรียกว่า "protocol_handlers" ซึ่งรับอาร์เรย์ของ
ออบเจ็กต์ที่มีคีย์ที่จำเป็น 2 รายการ ได้แก่ "protocol" และ "url" ข้อมูลโค้ดต่อไปนี้แสดงวิธีลงทะเบียน web+tea และ web+coffee ค่าจะเป็นสตริงที่มี URL ของตัวแฮนเดิลพร้อมตัวยึดตำแหน่ง %s ที่จำเป็นสำหรับ URL ที่หลีกแล้ว
{
"protocol_handlers": [
{
"protocol": "web+tea",
"url": "/tea?type=%s"
},
{
"protocol": "web+coffee",
"url": "/coffee?type=%s"
}
]
}
แอปหลายแอปที่ลงทะเบียนสำหรับโปรโตคอลเดียวกัน
หากแอปพลิเคชันหลายแอปพลิเคชันลงทะเบียนตัวเองเป็นตัวแฮนเดิลสำหรับสคีมาเดียวกัน เช่น โปรโตคอล mailto ระบบปฏิบัติการจะแสดงตัวเลือกให้ผู้ใช้และให้ผู้ใช้ตัดสินใจว่าจะใช้ตัวแฮนเดิลที่ลงทะเบียนไว้ตัวใด
แอปเดียวกันที่ลงทะเบียนสำหรับโปรโตคอลหลายรายการ
แอปเดียวกันสามารถลงทะเบียนตัวเองสำหรับโปรโตคอลหลายรายการได้ ดังที่แสดงในตัวอย่างโค้ด
การอัปเดตแอปและการลงทะเบียนตัวแฮนเดิล
การลงทะเบียนตัวแฮนเดิลจะซิงค์กับไฟล์ Manifest เวอร์ชันล่าสุดที่แอปให้มา โดยมี 2 กรณีดังนี้
- การอัปเดตที่เพิ่มตัวแฮนเดิลใหม่จะทริกเกอร์การลงทะเบียนตัวแฮนเดิล (แยกจากการติดตั้งแอป)
- การอัปเดตที่นำตัวแฮนเดิลออกจะทริกเกอร์การยกเลิกการลงทะเบียนตัวแฮนเดิล (แยกจากการถอนการติดตั้งแอป)
การแก้ไขข้อบกพร่องของตัวแฮนเดิลโปรโตคอลในเครื่องมือสำหรับนักพัฒนาเว็บ
ไปที่ส่วนตัวแฮนเดิลโปรโตคอล โดยใช้แผงแอปพลิเคชัน > ไฟล์ Manifest คุณสามารถดูและทดสอบโปรโตคอลที่มีทั้งหมดได้ที่นี่

ข้อควรพิจารณาด้านความปลอดภัย
เนื่องจากการติดตั้ง PWA ต้องใช้บริบทที่ปลอดภัย การจัดการโปรโตคอลจึงสืบทอดข้อจำกัดนี้ ระบบจะไม่เปิดเผยรายการตัวแฮนเดิลโปรโตคอลที่ลงทะเบียนไว้บนเว็บในทุกกรณี จึงไม่สามารถใช้เป็นเวกเตอร์การระบุตัวตนได้
ความพยายามในการนำทางที่ผู้ใช้ไม่ได้เริ่ม
ความพยายามในการนำทางที่ผู้ใช้ไม่ได้เริ่ม แต่เป็นแบบเป็นโปรแกรมอาจไม่เปิดแอป URL โปรโตคอลที่กำหนดเองจะใช้ได้ในบริบทการท่องเว็บระดับบนสุดเท่านั้น แต่ใช้ไม่ได้ เช่น เป็น URL ของ iframe
รายการที่อนุญาตของโปรโตคอล
เช่นเดียวกับ registerProtocolHandler() มีรายการที่อนุญาตของโปรโตคอลที่แอปสามารถลงทะเบียนเพื่อจัดการได้
ข้อความแจ้งความยินยอม
เมื่อเปิด PWA เป็นครั้งแรกเนื่องจากมีการเรียกใช้โปรโตคอล ผู้ใช้จะเห็นกล่องโต้ตอบการขอสิทธิ์ กล่องโต้ตอบนี้จะแสดงชื่อแอปและต้นทางของแอป และถามผู้ใช้ว่าอนุญาตให้แอปจัดการลิงก์จากโปรโตคอลได้หรือไม่ หากผู้ใช้ปฏิเสธกล่องโต้ตอบการขอสิทธิ์ ระบบปฏิบัติการจะละเว้นตัวแฮนเดิลโปรโตคอลที่ลงทะเบียนไว้ หากต้องการยกเลิกการลงทะเบียนตัวแฮนเดิลโปรโตคอล ผู้ใช้ต้องถอนการติดตั้ง PWA ที่ลงทะเบียนตัวแฮนเดิล นอกจากนี้ เบราว์เซอร์จะยกเลิกการลงทะเบียนตัวแฮนเดิลโปรโตคอลด้วยหากผู้ใช้เลือก "จดจำตัวเลือกของฉัน" และเลือก "ไม่อนุญาต"
ความคิดเห็น
ทีม Chromium อยากทราบความคิดเห็นของคุณเกี่ยวกับประสบการณ์การใช้งานการลงทะเบียนตัวแฮนเดิลโปรโตคอลของ URL สำหรับ PWA
บอกเราเกี่ยวกับการออกแบบ API
มีบางอย่างเกี่ยวกับ API ที่ไม่ทำงานตามที่คุณคาดไว้ไหม หรือมีเมธอดหรือพร็อพเพอร์ตี้ที่ขาดหายไปซึ่งคุณต้องใช้เพื่อนำแนวคิดไปใช้ไหม หากมีคำถามหรือความคิดเห็นเกี่ยวกับโมเดลความปลอดภัย โปรดแจ้งปัญหาเกี่ยวกับข้อกำหนดในที่เก็บ GitHub ที่เกี่ยวข้อง หรือเพิ่มความคิดเห็นของคุณลงในปัญหาที่มีอยู่
รายงานปัญหาเกี่ยวกับการใช้งาน
คุณพบข้อบกพร่องในการใช้งาน Chromium ไหม หรือการใช้งานแตกต่างจากข้อกำหนดไหม
โปรดแจ้งข้อบกพร่องที่ new.crbug.com อย่าลืมใส่รายละเอียดให้มากที่สุดเท่าที่จะทำได้
รวมถึงวิธีการจำลองปัญหา และป้อน UI>Browser>WebAppInstalls ในช่องคอมโพเนนต์
แสดงการสนับสนุน API
คุณวางแผนที่จะใช้การลงทะเบียนตัวแฮนเดิลโปรโตคอลของ URL สำหรับ PWA ไหม การสนับสนุนจากสาธารณะจะช่วยให้ทีม Chromium จัดลำดับความสำคัญของฟีเจอร์และแสดงให้ผู้ให้บริการเบราว์เซอร์รายอื่นๆ เห็นว่าการรองรับฟีเจอร์เหล่านี้มีความสำคัญเพียงใด
แชร์วิธีที่คุณวางแผนจะใช้ฟีเจอร์นี้ในเธรด WICG Discourse ส่งทวีตไปที่
@ChromiumDev โดยใช้แฮชแท็ก
#ProtocolHandler
และบอกให้เราทราบว่าคุณใช้ฟีเจอร์นี้ที่ใดและอย่างไร
ลิงก์ที่มีประโยชน์
- วิดีโออธิบาย
- ฉบับร่างข้อกำหนด
- GitHub
- ChromeStatus
- ข้อบกพร่องของ Chromium
- การตรวจสอบของ TAG
- Discourse
คำขอบคุณ
การลงทะเบียนตัวแฮนเดิลโปรโตคอลของ URL สำหรับ PWA ได้รับการใช้งานและระบุโดย Fabio Rocha, Diego González, Connor Moody และ Samuel Tang จากทีม Microsoft Edge เอกสารนี้ได้รับการตรวจสอบโดย Joe Medley และ Fabio Rocha