เนื้อหาที่ฝังเป็นวิธีที่ดีที่สุดในการคงผู้ใช้ไว้ในเว็บไซต์ พร้อมกับแชร์เนื้อหาจากหน้าเว็บหรือเว็บไซต์อื่นๆ ซึ่งอาจเล็กเท่ากับการฝังทวีตที่แสดงในสไตล์และรูปแบบของ Twitter ชิ้นงานอาจใหญ่เท่ากับเว็บไซต์แยกต่างหากที่ฝังอยู่ในเว็บไซต์ของคุณเอง เช่น ร้านค้า Shopify ที่ฝังไว้ ซึ่งผู้เข้าชมสามารถทำการซื้อได้โดยไม่ต้องออกจากเว็บไซต์
ปัจจุบันการรักษาความปลอดภัยของเว็บไซต์เมื่อฝังเนื้อหาเป็นเรื่องสำคัญยิ่งกว่าที่เคย
นักพัฒนาแอปสามารถฝังเนื้อหาในเว็บไซต์ได้หลายวิธี เทคนิคที่ใช้กันมากที่สุดคือการใช้ <iframe>
ซึ่งช่วยให้คุณฝังเนื้อหาลงในเว็บไซต์ได้โดยใช้เพียง URL คุณเพิ่มแอตทริบิวต์ sandbox
เพื่อทำให้ iframe ปลอดภัยยิ่งขึ้นได้
หรือจะใช้องค์ประกอบ HTML ที่แนะนำก็ได้ ดังนี้
<fencedframe>
ได้รับการเสนอให้เป็นวิธีที่รักษาความเป็นส่วนตัวเพื่อฝังเนื้อหาของบุคคลที่สาม- เราขอแนะนำให้ใช้
<portal>
เพื่อให้การเปลี่ยนหน้าเว็บเป็นไปอย่างราบรื่นยิ่งขึ้น
อ่านต่อเพื่อดูวิธีปรับปรุงความปลอดภัยของเนื้อหาที่ฝัง
ฝังด้วย iframe
คุณสามารถใช้ iframe กับกรณีการใช้งานได้ทุกประเภท เช่น การเพิ่มแผนที่หรือแบบฟอร์มลงในหน้าติดต่อและการแสดงโฆษณา
<iframe src="https://example.com/maps"></iframe>
iframe แต่ละรายการมีบริบทการท่องเว็บของตนเอง พร้อมด้วยประวัติเซสชันและเอกสารของตัวเอง บริบทที่ฝัง iframe เรียกว่าบริบทการท่องเว็บหลัก
เนื้อหาของบุคคลที่สามที่แสดงใน 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>
Sandbox อาจทําให้ API บางรายการไม่พร้อมใช้งาน ซึ่งสําคัญต่อเนื้อหาที่ฝัง หากต้องการอนุญาต API ที่ปิดใช้ คุณสามารถเพิ่มอาร์กิวเมนต์ไปยังแอตทริบิวต์ "sandbox" ได้อย่างชัดเจน
<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>
เฟรมที่มีรั้วล้อมเป็นข้อเสนอ 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 (<portal>
) เป็นเอลิเมนต์ HTML ที่เสนอซึ่งมีบริบทการท่องเว็บแบบอิสระ ซึ่งอาจช่วยปรับปรุงประสบการณ์การเปลี่ยนหน้าได้ พอร์ทัลฝังเนื้อหา เช่น iframe แต่ผู้ใช้ไม่สามารถเข้าถึงโค้ดของพอร์ทัลได้ พอร์ทัลเป็นแบบดูอย่างเดียวและผู้ใช้ไม่สามารถโต้ตอบด้วยได้
พอร์ทัลมีความซับซ้อนต่ำของแอปพลิเคชันหลายหน้าพร้อมด้วยการเปลี่ยนผ่านที่ราบรื่นของแอปพลิเคชันหน้าเว็บเดียว การเปลี่ยนหน้าเหล่านี้สามารถเป็นภาพเคลื่อนไหว และแทนที่เนื้อหาในหน้าต่างเบราว์เซอร์ได้อย่างรวดเร็ว
<portal src="https://example.com/"></portal>
ข้อกำหนดของพอร์ทัลยังอยู่ในขั้นเริ่มต้นของการพัฒนา
องค์ประกอบ HTML อื่นๆ ที่ใช้สำหรับการฝัง
ตลอดประวัติศาสตร์ของเว็บ มีการเสนอองค์ประกอบ HTML และสร้าง API จำนวนมากเพื่อฝังเนื้อหา ในช่วงหนึ่ง การสร้างเว็บไซต์ที่มีองค์ประกอบ <frame>
หลายรายการและ <frameset>
เป็นเรื่องปกติ เว็บไซต์ที่มีองค์ประกอบ <frameset>
หลายรายการจะแสดง URL ของหน้าหลักในแถบที่อยู่ โดยไม่คำนึงถึงแหล่งที่มาของเฟรมแต่ละเฟรม ซึ่งทำให้แชร์ลิงก์ไปยังเนื้อหาภายในเว็บไซต์ได้ยาก เราเลิกใช้งาน API เหล่านี้แล้ว
นอกจากนี้ ยังมีการใช้เทคโนโลยีปลั๊กอิน เช่น <applet>
องค์ประกอบ Java เพื่อครอบคลุมกรณีการใช้งานอื่นๆ ด้วย ต่อมาองค์ประกอบ <object>
ได้เข้ามาแทนที่ โดยทั่วไปแล้ว องค์ประกอบทั้ง 2 รายการนี้ใช้เพื่อแสดงปลั๊กอิน Flash แต่ก็ยังใช้เพื่อแสดงองค์ประกอบ HTML อื่นๆ ด้วย (คล้ายกับ iframe)
องค์ประกอบอื่นๆ เช่น <canvas>
, <audio>
, <video>
และ <svg>
ทำให้องค์ประกอบทั้ง <object>
และ <applet>
ล้าสมัย
แม้ว่า <object>
และ <embed>
จะยังไม่เลิกใช้งานอย่างเป็นทางการ แต่คุณควรหลีกเลี่ยงการใช้ 2 รายการนี้ โดยเฉพาะเนื่องจากมีลักษณะการทำงานที่แปลก
<applet>
ถูกนำออกจากข้อกำหนด HTML ในปี 2017
บทสรุป
คุณสามารถฝังเนื้อหาลงในเว็บไซต์ใดก็ได้อย่างปลอดภัยโดยใช้ข้อกำหนด iframe ที่มีอยู่ มีการนำองค์ประกอบ HTML อื่นๆ มาใช้ เช่น <fencedframe>
และ <portal>
เพื่อปรับปรุงความปลอดภัยและรูปแบบ เราจะแชร์ความคืบหน้าเกี่ยวกับข้อเสนอเฟรมที่มีรั้วล้อมต่อไปเรื่อยๆ