เนื้อหาที่ฝังเป็นวิธีที่ดีที่สุดเพื่อให้ผู้ใช้อยู่ในเว็บไซต์ต่อไป ในขณะเดียวกันก็แชร์เนื้อหาจากหน้าเว็บหรือเว็บไซต์อื่นๆ ซึ่งอาจเป็นขนาดเล็กเท่าๆ กับทวีตที่ฝัง ซึ่งจะแสดงในรูปแบบและรูปแบบของ Twitter อาจมีขนาดใหญ่เท่าๆ กับที่เว็บไซต์แยกต่างหากทั้งหมดฝังอยู่ในเว็บไซต์ของคุณเอง เช่น ร้านค้า Shopify ที่ฝังอยู่ภายในที่ซึ่งผู้เข้าชมสามารถทำการซื้อโดยไม่ต้องออกจากเว็บไซต์
สิ่งที่เราให้ความสำคัญมากกว่าที่เคยคือการทำให้เว็บไซต์ของเรายังคงปลอดภัยเมื่อเราฝังเนื้อหา
นักพัฒนาแอปสามารถฝังเนื้อหาในเว็บไซต์ได้หลายวิธี เทคนิคที่ใช้กันมากที่สุดคือการใช้ <iframe>
ซึ่งช่วยให้คุณฝังเนื้อหาในเว็บไซต์โดยใช้เพียง URL ได้ ทั้งนี้คุณเพิ่มแอตทริบิวต์ sandbox
เพื่อทำให้ iframe ปลอดภัยยิ่งขึ้นได้อยู่แล้ว
หรือคุณจะใช้องค์ประกอบ HTML ที่เสนอก็ได้ ดังนี้
- มีการเสนอ
<fencedframe>
เพื่อฝังเนื้อหาของบุคคลที่สามในลักษณะที่รักษาความเป็นส่วนตัว - มีการเสนอ
<portal>
เพื่อให้การเปลี่ยนหน้าเป็นไปอย่างราบรื่นยิ่งขึ้น
อ่านต่อเพื่อดูวิธีเพิ่มความปลอดภัยให้กับเนื้อหาที่ฝัง
ฝังด้วย iframe
คุณสามารถใช้ iframe กับกรณีการใช้งานทุกประเภท เช่น การเพิ่มแผนที่หรือแบบฟอร์มลงในหน้าติดต่อและการแสดงโฆษณา
<iframe src="https://example.com/maps"></iframe>
iframe แต่ละรายการมีบริบทการท่องเว็บของตัวเอง โดยมีประวัติเซสชันและเอกสารของตัวเอง บริบทที่ฝัง iframe ไว้เรียกว่าบริบทการท่องเว็บparent
เนื้อหาของบุคคลที่สามที่แสดงใน iframe จะโต้ตอบกับเว็บไซต์หลักได้ผ่านทาง postMessage()
วิธีนี้ช่วยให้นักพัฒนาซอฟต์แวร์ส่งค่าที่กำหนดเองระหว่างบริบทการท่องเว็บได้ ผู้รับข้อความสามารถใช้ Listener เหตุการณ์ onmessage
เพื่อรับค่าต่างๆ
// inside iframe
window.parent.postMessage("ping", "https://example.com");
// window
window.addEventListener("message", (event) => {
console.log(event.data);
})
เพิ่มความปลอดภัยด้วยแอตทริบิวต์ sandbox
หากมีการใช้งานเนื้อหาที่เป็นอันตรายใน iframe เป็นไปได้ว่าระบบอาจเรียกใช้การดำเนินการที่ไม่ตั้งใจ (เช่น การเรียกใช้ JavaScript หรือการส่งแบบฟอร์ม)
ในการหลีกเลี่ยงปัญหานี้ แอตทริบิวต์ sandbox
จะจำกัด API ที่ดำเนินการได้ใน iframe และปิดใช้ฟีเจอร์ที่อาจเป็นอันตราย
<iframe src="https://example.com" sandbox></iframe>
แซนด์บ็อกซ์อาจทําให้ API บางรายการที่สําคัญต่อเนื้อหาที่ฝังไว้ไม่พร้อมใช้งาน หากต้องการอนุญาต API ที่ปิดใช้ไปแล้ว ให้เพิ่มอาร์กิวเมนต์ลงในแอตทริบิวต์แซนด์บ็อกซ์อย่างชัดแจ้ง
<iframe sandbox="allow-forms" src="https://example.com"></iframe>
ค่าที่เป็นไปได้หลายค่าสำหรับข้อกำหนดของ sandbox
ซึ่งได้แก่ allow-forms
, allow-same-origin
, allow-popups
และอื่นๆ
นโยบายสิทธิ์
เมื่อมีการพัฒนาฟีเจอร์ที่มีประสิทธิภาพมากขึ้นสำหรับเว็บ เราจึงสร้างนโยบายสิทธิ์ขึ้นมาเพื่อจัดการสิทธิ์สำหรับทุกนโยบาย นโยบายสิทธิ์ใช้ได้กับเว็บไซต์หลักและเนื้อหา iframe คุณให้สิทธิ์ที่ให้แก่เว็บไซต์หลักแก่ iframe ได้ด้วยโดยใช้แอตทริบิวต์ allow
<iframe src="https://example.com" allow="fullscreen"></iframe>
ฝังพร้อมเฟรมที่มีการปิดกั้น
เฟรมที่มีการปิดกั้น (<fencedframe>
) คือองค์ประกอบ HTML ที่เสนอสำหรับเนื้อหาที่ฝัง ซึ่งคล้ายกับ iframe เฟรมที่มีการปิดกั้นซึ่งแตกต่างจาก iframe ตรงที่จะจำกัดการสื่อสารด้วยบริบทที่ฝังอยู่เพื่อให้เฟรมเข้าถึงข้อมูลแบบข้ามเว็บไซต์ได้โดยไม่ต้องแชร์ข้อมูลกับบริบทที่ฝัง ในทํานองเดียวกัน ข้อมูลจากบุคคลที่หนึ่งในหน้าเว็บของผู้เผยแพร่โฆษณาหลักจะแชร์กับเฟรมที่มีการปิดกั้นไม่ได้
<fencedframe src="https://3rd.party.example"></fencedframe>
Fenced Frames เป็นข้อเสนอ Privacy Sandbox ที่แนะนำว่าเว็บไซต์ระดับบนสุดควรแบ่งพาร์ติชันข้อมูล ข้อเสนอ Privacy Sandbox จำนวนมากมีเป้าหมายเพื่อตอบสนองกรณีการใช้งานข้ามเว็บไซต์โดยไม่มีคุกกี้ของบุคคลที่สามหรือกลไกการติดตามอื่นๆ Privacy Sandbox API บางรายการอาจกำหนดให้เอกสารบางรายการแสดงผลภายในเฟรมที่มีการปิดกั้น
เช่น ระบบจะสร้างเฟรมที่มีการปิดกั้นสำหรับผู้ชนะการประมูลเพื่อแสดงโฆษณา FLEDGE API FLEDGE API จะระบุแหล่งที่มาแบบทึบ ซึ่งเป็นรูปแบบ URN ที่ไม่อิงตามตำแหน่ง ซึ่งแสดงผลภายในเฟรมที่มีการปิดกั้นได้ แหล่งที่มาแบบทึบช่วยให้เว็บไซต์แสดงเนื้อหาในเว็บไซต์ของตนได้ โดยไม่เปิดเผย URL แหล่งที่มาของโฆษณาแก่เจ้าของเว็บไซต์
<fencedframe src="urn:uuid:c36973b5-e5d9-de59-e4c4-364f137b3c7a"></fencedframe>
สุดท้ายแล้ว เฟรมที่มีการปิดกั้นจะไม่แทนที่ iframe คุณไม่จำเป็นต้องใช้ ระบบจะเสนอเฟรมที่มีการปิดกั้นสำหรับเฟรมที่เป็นส่วนตัวมากขึ้นสำหรับการใช้งานเมื่อต้องแสดงข้อมูลจากพาร์ติชันระดับบนสุดที่แตกต่างกันในหน้าเดียวกัน
ฝังด้วยพอร์ทัล
พอร์ทัล (<portal>
) เป็นองค์ประกอบ HTML ที่เสนอโดยมีบริบทของการท่องเว็บแบบอิสระ ซึ่งช่วยปรับปรุงประสบการณ์การเปลี่ยนหน้าได้ พอร์ทัลจะฝังเนื้อหา เช่น iframe แต่ผู้ใช้ไม่สามารถเข้าถึงโค้ดของพอร์ทัลได้ พอร์ทัลเป็นแบบดูอย่างเดียวและผู้ใช้ไม่สามารถโต้ตอบกับได้
พอร์ทัลทำให้แอปพลิเคชันที่มีหลายหน้ามีความซับซ้อนต่ำ พร้อมกับการเปลี่ยนผ่านของแอปพลิเคชันหน้าเว็บเดียวอย่างราบรื่น การเปลี่ยนเหล่านี้สามารถทำเป็นภาพเคลื่อนไหว โดยแทนที่เนื้อหาในหน้าต่างเบราว์เซอร์ได้อย่างรวดเร็ว
<portal src="https://example.com/"></portal>
ข้อกำหนดของพอร์ทัลยังอยู่ในระยะแรกๆ ของการพัฒนา
องค์ประกอบ HTML อื่นๆ ที่ใช้สำหรับการฝัง
ตลอดประวัติเว็บ มีการเสนอองค์ประกอบ HTML จำนวนหนึ่งและ API ที่สร้างขึ้นเพื่อฝังเนื้อหา เป็นเรื่องปกติที่จะสร้างเว็บไซต์ที่มี <frame>
หลายรายการและองค์ประกอบ <frameset>
หลายรายการ เว็บไซต์ที่มีองค์ประกอบ <frameset>
หลายรายการแสดง URL ของหน้าหลักในแถบที่อยู่ โดยไม่คำนึงถึงแหล่งที่มาของเฟรมจำนวนมากแต่ละเฟรม ซึ่งทำให้แชร์ลิงก์ไปยังเนื้อหาภายในเว็บไซต์ได้ยาก และเราเลิกใช้งาน API เหล่านี้แล้ว
นอกจากนี้ยังมีสมัยนั้นมีการใช้เทคโนโลยีปลั๊กอิน เช่น องค์ประกอบ <applet>
ของ Java เพื่อให้ครอบคลุมกรณีการใช้งานอื่นๆ ซึ่งภายหลังมีองค์ประกอบ <object>
มาแทนที่ องค์ประกอบทั้งสองนี้มักใช้เพื่อแสดงปลั๊กอิน Flash
แต่ใช้เพื่อแสดงองค์ประกอบ HTML อื่นๆ ด้วย (คล้ายกับ iframe)
องค์ประกอบอื่นๆ เช่น <canvas>
, <audio>
, <video>
และ <svg>
แสดงผลทั้งองค์ประกอบ <object>
และ <applet>
ที่ล้าสมัย
แม้ว่า <object>
และ <embed>
จะยังไม่ได้เลิกใช้งานอย่างเป็นทางการ แต่เราขอแนะนำให้หลีกเลี่ยง โดยเฉพาะเนื่องจากมีลักษณะการทำงานที่แปลกๆ
<applet>
ถูกนำออกจากข้อกำหนด HTML ในปี 2017
บทสรุป
คุณจะฝังเนื้อหาลงในเว็บไซต์ต่างๆ ได้อย่างปลอดภัยโดยใช้ข้อกำหนดของ iframe ที่มีอยู่ มีการเสนอองค์ประกอบ HTML เพิ่มเติม ซึ่งรวมถึง <fencedframe>
และ <portal>
เพื่อปรับปรุงความปลอดภัยและสไตล์ เราจะมาแชร์ความคืบหน้าในข้อเสนอเฟรมที่ล้อมรั้วอย่างต่อเนื่อง
รูปภาพหลักโดย Jackson So