อนุญาตให้ 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()
เมธอด Navigator สำหรับเนื้อหาที่ปลอดภัยเท่านั้น
registerProtocolHandler()
ช่วยให้เว็บไซต์ลงทะเบียนความสามารถในการเปิดหรือจัดการ URL Scheme ที่เฉพาะเจาะจงได้ ดังนั้น เว็บไซต์จึงต้องเรียกใช้เมธอดในลักษณะนี้ 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 และแจ้งให้เราทราบว่าคุณใช้เครื่องมือนี้ที่ไหนและอย่างไร
ลิงก์ที่มีประโยชน์
การรับทราบ
การลงทะเบียนตัวแฮนเดิลโปรโตคอลของ URL สำหรับ PWA ได้รับการติดตั้งใช้งานและระบุโดย Fabio Rocha, Diego González, Connor Moody และ Samuel Tang จากทีม Microsoft Edge เอกสารนี้ได้รับการตรวจสอบโดย Joe Medley และ Fabio Rocha