HTML: iframe في HTML
يسمح لك <iframe> (إطار مضمن) بتضمين صفحة HTML أخرى داخل الصفحة الحالية. سواءً كان تضمين مقاطع فيديو أو خرائط أو صفحات ويب أخرى، فإن iframe أداة لا غنى عنها في تطوير الويب.
1. أساسيات iframe
استخدم <iframe src="URL"></iframe> لتضمين صفحة ويب أخرى في الصفحة الحالية. السمتان width و height تتحكمان في أبعاد العرض:
▶ مثال
<!-- تضمين صفحة بسيطة، عرض 600px، ارتفاع 400px -->
<iframe src="https://example.com" width="600" height="400">
متصفحك لا يدعم iframe.
</iframe>
2. شرح سمات iframe
توفر iframe عدة سمات للتحكم في سلوك التضمين:
src— عنوان URL للصفحة المراد تضمينهاwidth/height— تعيين أبعاد iframe بالبكسلtitle— توفير وصف لـ iframe؛ مهم جدًا لقارئات الشاشةname— إعطاء iframe اسمًا، يمكن استخدامه كـtargetللروابط (<a>)
سمة name مع target تتيح للروابط الفتح داخل iframe:
<!-- iframe مسمى -->
### ▶ مثال
<iframe src="about:blank" name="content-frame"
width="100%" height="300"></iframe>
<!-- الروابط تفتح داخل iframe عبر target -->
<a href="https://www.wikipedia.org" target="content-frame">
فتح ويكيبيديا في iframe
</a>
<a href="https://www.example.com" target="content-frame">
فتح مثال في iframe
</a>
title ليست اختيارية لـ iframe — تعلنها قارئات الشاشة لمساعدة المستخدمين ضعاف البصر على فهم المحتوى المضمن. حتى لو لم تكن مرئية على الصفحة، أضف دائمًا title ذا معنى لكل iframe.
3. أمان iframe — سمة sandbox
سمة sandbox تفرض قيودًا إضافية على المحتوى داخل iframe وهي إجراء أمني مهم. يمكنها تقييد إرسال النماذج والنوافذ المنبثقة وتنفيذ البرامج النصية والسلوكيات الأخرى:
sandbox=""(فارغة) — تفعيل جميع القيود، أكثر أشكال التقييدsandbox="allow-scripts"— يسمح بتنفيذ البرامج النصية، لكن يمنع السلوكيات الأخرىsandbox="allow-scripts allow-forms"— يسمح بالبرامج النصية وإرسال النماذج
<!-- أقصى تقييد: تعطيل جميع الميزات المتقدمة -->
<iframe src="https://example.com" sandbox=""></iframe>
<!-- السماح بالبرامج النصية، لكن منع إرسال النماذج والنوافذ المنبثقة -->
<iframe src="https://example.com" sandbox="allow-scripts"></iframe>
<!-- السماح بالبرامج النصية والنماذج، لكن لا يزال يمنع النوافذ المنبثقة والتنقل -->
<iframe src="https://example.com"
sandbox="allow-scripts allow-forms"></iframe>
4. تضمين محتوى طرف ثالث
الاستخدام الأكثر شيوعًا لـ iframe في العالم الحقيقي هو تضمين المحتوى من خدمات الطرف الثالث، مثل فيديوهات YouTube وخرائط Google:
<!-- تضمين فيديو YouTube -->
<iframe width="560" height="315"
src="https://www.youtube.com/embed/VIDEO_ID"
### ▶ مثال
title="مشغل فيديو YouTube"
allow="accelerometer; autoplay; clipboard-write;
encrypted-media; gyroscope; picture-in-picture"
allowfullscreen></iframe>
<!-- تضمين خريطة Google -->
<iframe width="600" height="450"
src="https://www.google.com/maps/embed?pb=..."
title="خريطة Google"
allowfullscreen
loading="lazy"></iframe>
عند تضمين محتوى طرف ثالث، توفر المنصات عادةً كود iframe جاهزًا في خيارات المشاركة/التضمين — تحتاج فقط إلى النسخ واللصق. تأكد من تضمين سمة title و loading="lazy"" لتحسين أداء التحميل.
5. نظرة عامة على التواصل بين iframe والصفحة الأب
عندما يشترك iframe والصفحة الأب في نفس المصدر (نفس البروتوكول والنطاق والمنفذ)، يمكنك الوصول مباشرة إلى DOM بعضكما البعض عبر JavaScript. للسيناريوهات عبر النطاقات، يوفر HTML5 واجهة postMessage للتواصل الآمن:
<!-- الصفحة الأب ترسل رسالة -->
<iframe src="https://other-domain.com/page"
id="myFrame" title="صفحة عبر النطاقات"></iframe>
<script>
var frame = document.getElementById('myFrame');
frame.contentWindow.postMessage('مرحباً، iframe!', 'https://other-domain.com');
</script>
<!-- داخل iframe، استلام الرسالة (يجب أن يكون في الصفحة المضمنة) -->
<script>
window.addEventListener('message', function(event) {
// تحقق دائمًا من المصدر!
if (event.origin !== 'https://parent-domain.com') return;
console.log('تم الاستلام:', event.data);
});
</script>
🔒 نصيحة أمنية: عند استخدام
postMessage، لا تثق أبدًا في أي شيء يتجاوزevent.origin. تحقق دائمًا من مصدر الرسالة لتجنب إرسال بيانات حساسة إلى نطاقات غير موثوقة.
❓ أسئلة شائعة
sandbox لتقييد الوظائف، allow للتحكم الدقيق في الأذونات، رأس X-Frame-Options لمنع التضمين.sandbox؟sandbox "صندوق رمل" لـ iframe، مع تعطيل جميع العمليات الخطيرة افتراضيًا (النصوص والنماذج والنوافذ المنبثقة، إلخ). يمكنك تمكين الأذونات تدريجيًا: sandbox="allow-scripts" يسمح بـ JavaScript، sandbox="allow-forms" يسمح بإرسال النماذج، sandbox="allow-same-origin" يسمح بالوصول إلى ملفات تعريف الارتباط. أذونات متعددة مفصولة بمسافة. التوصية: استخدم دائمًا sandbox، فقط فعّل الأذونات التي تحتاجها بالفعل.<embed>/<object>؟<iframe> مخصص لتضمين صفحات HTML، مع دعم كامل للميزات (sandbox، postMessage، إلخ). <embed> و <object> يضمّنان محتوى غير HTML (مثل PDF و Flash و SVG). في HTML5، <embed> هو وسم فارغ؛ <object> يمكن أن يحتوي على محتوى احتياطي (<param> و fallback). التوصية: استخدم <iframe> لصفحات الويب، <embed> أو <object> لملفات PDF.📖 ملخص
<iframe>يضمّن صفحة HTML أخرى داخل الصفحة الحاليةsrcيحدد عنوان التضمين؛width/heightيتحكمان في الأبعادtitleيوفر وصفًا لإمكانية الوصول؛nameيعمل مع سمةtargetsandboxيقيد الوظائف داخل iframe لتعزيز الأمان- YouTube وخرائط Google ومحتوى طرف ثالث آخر يُضمّن عادةً عبر iframe
postMessageيتيح التواصل عبر النطاقات بين الصفحات الأب والابن
📝 تمارين
- ضمّن أول فيديو لك: ابحث عن فيديو YouTube، انسخ كود التضمين الخاص به، والصقه في ملف HTML الخاص بك. تأكد من إضافة سمة
titleوloading="lazy". - تجربة Sandbox: أنشئ iframe، ابدأ بـ
sandbox=""(أكثر وضع تقييدًا)، ثم فعّل تدريجيًاallow-scriptsوallow-forms، ولاحظ كيف يتغير السلوك.