อนุญาตให้ 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 ที่เฉพาะเจาะจงได้ ดังนั้น เว็บไซต์จึงต้องเรียกใช้เมธอดดังนี้ 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 ของงานนำเสนอจะเปิดขึ้นโดยอัตโนมัติในขอบเขตที่ถูกต้องและแสดงชุดสไลด์ - ในแอปแชทเฉพาะแพลตฟอร์ม ผู้ใช้ในข้อความแชทจะได้รับลิงก์ไปยัง
magnet
URL เมื่อคลิกลิงก์ 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 เดโมนี้ ในส่วนตัวแฮนเดิลโปรโตคอล ให้พิมพ์ "americano" แล้วคลิกทดสอบโปรโตคอลเพื่อเปิดหน้ากาแฟใน PWA
สาธิต
คุณดูการสาธิตการลงทะเบียนตัวแฮนเดิลโปรโตคอลของ URL สําหรับ PWA ได้ใน Glitch
- ไปที่ https://protocol-handler.glitch.me/ ติดตั้ง PWA และโหลดแอปอีกครั้งหลังจากติดตั้ง ตอนนี้เบราว์เซอร์ได้ลงทะเบียน PWA เป็นตัวจัดการโปรโตคอล
web+coffee
กับระบบปฏิบัติการแล้ว - ในหน้าต่าง PWA ที่ติดตั้ง ให้คลิกลิงก์ https://protocol-handler-link.glitch.me/ ซึ่งจะเปิดแท็บเบราว์เซอร์ใหม่ที่มีลิงก์ 3 รายการ คลิกรายการแรกหรือรายการที่ 2 (ลาเต้มาคิยาโตหรืออเมริกาโน) ตอนนี้เบราว์เซอร์จะแสดงข้อความแจ้งและถามว่าคุณอนุญาตให้แอปเป็นตัวแฮนเดิลโปรโตคอลสำหรับโปรโตคอล
web+coffee
หรือไม่ หากคุณยอมรับ PWA จะเปิดขึ้นและแสดงกาแฟที่เลือก - หากต้องการเปรียบเทียบกับขั้นตอนแบบดั้งเดิมที่ใช้
navigator.registerProtocolHandler()
ให้คลิกปุ่มลงทะเบียนตัวแฮนเดิลโปรโตคอลใน PWA จากนั้นในแท็บเบราว์เซอร์ ให้คลิกลิงก์ที่ 3 (chai) การดำเนินการนี้จะแสดงข้อความแจ้งด้วยเช่นกัน แต่ระบบจะเปิด PWA ในแท็บ ไม่ใช่ในหน้าต่างเบราว์เซอร์ - ส่งข้อความถึงตัวเองในแอปพลิเคชันเฉพาะแพลตฟอร์ม เช่น Skype ใน Windows ที่มีลิงก์อย่างเช่น
<a href="web+coffee://americano">Americano</a>
แล้วคลิกลิงก์นั้น และควรเปิด PWA ที่ติดตั้งไว้ด้วย
ข้อควรพิจารณาด้านความปลอดภัย
เนื่องจากการติดตั้ง PWA กำหนดให้บริบทต้องปลอดภัย การจัดการโปรโตคอลจึงรับข้อจำกัดนี้มา รายการเครื่องจัดการโปรโตคอลที่ลงทะเบียนไว้จะไม่แสดงบนเว็บไม่ว่าในทางใดก็ตาม จึงไม่สามารถใช้เป็นเวกเตอร์ลายนิ้วมือได้
ความพยายามในการนําทางที่ไม่ได้เริ่มต้นโดยผู้ใช้
การพยายามไปยังส่วนต่างๆ ที่ผู้ใช้ไม่ได้เป็นผู้เริ่ม แต่ดำเนินการแบบเป็นโปรแกรมอาจไม่เปิดแอป URL โปรโตคอลที่กำหนดเองใช้ได้เฉพาะในบริบทการท่องเว็บระดับบนสุดเท่านั้น แต่ไม่สามารถใช้เป็น URL ของ iframe ตัวอย่างเช่น
รายการที่อนุญาตของโปรโตคอล
เช่นเดียวกับ registerProtocolHandler()
รายการที่อนุญาตของโปรโตคอลที่แอปสามารถลงทะเบียนเพื่อจัดการได้
ข้อความแจ้งความยินยอม
เมื่อเปิด PWA เป็นครั้งแรกเนื่องจากโปรโตคอลที่เรียกใช้ ผู้ใช้จะเห็นกล่องโต้ตอบสิทธิ์ กล่องโต้ตอบนี้จะแสดงชื่อแอปและต้นทางของแอป รวมถึงจะถามผู้ใช้ว่าอนุญาตให้แอปจัดการลิงก์จากโปรโตคอลหรือไม่ หากผู้ใช้ปฏิเสธกล่องโต้ตอบสิทธิ์ ระบบปฏิบัติการจะไม่สนใจตัวแฮนเดิลโปรโตคอลที่ลงทะเบียนไว้ หากต้องการยกเลิกการลงทะเบียนตัวแฮนเดิลโปรโตคอล ผู้ใช้จะต้องถอนการติดตั้ง PWA ที่ลงทะเบียนตัวแฮนเดิลนั้น นอกจากนี้เบราว์เซอร์จะยกเลิกการลงทะเบียนตัวแฮนเดิลโปรโตคอลด้วยหากผู้ใช้เลือก "จดจำตัวเลือกของฉัน" และเลือก "ไม่อนุญาต"
ความคิดเห็น
ทีม Chromium อยากทราบความคิดเห็นของคุณเกี่ยวกับการลงทะเบียนตัวแฮนเดิลโปรโตคอลของ URL สําหรับ PWA
บอกเราเกี่ยวกับการออกแบบ API
มีสิ่งใดเกี่ยวกับ API ที่ไม่ทำงานตามที่คาดไว้ไหม หรือมีเมธอดหรือพร็อพเพอร์ตี้ที่ขาดหายไปซึ่งคุณต้องนำไปใช้กับแนวคิดของคุณ หากมีคำถามหรือความคิดเห็นเกี่ยวกับรูปแบบการรักษาความปลอดภัย แจ้งปัญหาเกี่ยวกับข้อกำหนดใน GitHub repo ที่เกี่ยวข้อง หรือแสดงความคิดเห็นในปัญหาที่มีอยู่
รายงานปัญหาเกี่ยวกับการติดตั้งใช้งาน
หากพบข้อบกพร่องในการใช้งาน Chromium หรือการติดตั้งใช้งานแตกต่างจากข้อมูลจำเพาะหรือไม่
รายงานข้อบกพร่องที่ new.crbug.com โปรดระบุรายละเอียดให้มากที่สุดเท่าที่จะทำได้ วิธีการง่ายๆ ในการจำลองข้อบกพร่อง และป้อน UI>Browser>WebAppInstalls
ในช่องคอมโพเนนต์ Glitch เหมาะอย่างยิ่งสำหรับการแชร์การจำลองข้อบกพร่องที่รวดเร็วและง่ายดาย
แสดงการสนับสนุน API
คุณวางแผนที่จะใช้การลงทะเบียนตัวแฮนเดิลโปรโตคอลของ URL สําหรับ PWA ใช่ไหม การสนับสนุนแบบสาธารณะของคุณจะช่วยให้ทีม Chromium จัดลําดับความสําคัญของฟีเจอร์ต่างๆ และแสดงให้เห็นว่าการสนับสนุนฟีเจอร์เหล่านี้สำคัญเพียงใดต่อผู้ให้บริการเบราว์เซอร์รายอื่นๆ
แชร์ว่าคุณวางแผนจะใช้ WICG อย่างไรในชุดข้อความ Discourse ของ WICG ส่งทวีตถึง @ChromiumDev โดยใช้แฮชแท็ก #ProtocolHandler
และแจ้งให้เราทราบว่าคุณใช้ฟีเจอร์นี้ที่ไหนและอย่างไร
ลิงก์ที่มีประโยชน์
ขอขอบคุณ
การลงทะเบียนตัวแฮนเดิลโปรโตคอลของ URL สําหรับ PWA ได้รับการติดตั้งใช้งานและระบุโดย Fabio Rocha, Diego González, Connor Moody และ Samuel Tang จากทีม Microsoft Edge บทความนี้ผ่านการตรวจสอบโดย Joe Medley และ Fabio Rocha รูปภาพหลักโดย JJ Ying จาก Unsplash