Menu

HTML iframe: Sayfa, Video ve Harita Yerleştirme

<iframe> elementi senin sayfanın içinde başka bir web sayfası gösterir. Gereken özellikleri (src, title, width, height), YouTube videolarını ve haritaları yerleştirmeyi, bir iframe'i responsive yapmayı, sandbox'ın onun yapabileceklerini nasıl sınırladığını ve bazı sitelerin neden bir iframe içinde yüklenmeyi reddettiğini öğren.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

iframe nasıl kullanılır

Bir <iframe> seninkinin içinde başka bir sayfa gösterir. Ona src içinde sayfanın adresini, onu tarif eden bir title ve bir boyut ver:

<iframe src="https://example.com/" title="Example site" width="600" height="400"></iframe>

Çerçeve sayfayı kendi stilleri ve script'leri olan ayrı bir belge olarak yükler. Bu sayfadaki örnekler src yerine, çerçevenin HTML'ini doğrudan özelliğin içine koyan srcdoc kullanır, bu yüzden başka bir site yüklemeden çalışırlar:

Dıştaki paragraf mavi ve kalın; çerçevenin içindeki paragraf ise, aynı p kuralı sayfada olmasına rağmen, öyle değil. Stiller çerçeve sınırını hiçbir yönde geçmez. Varsayılan kenarlık ve 300×150 varsayılan boyut tarayıcıdan gelir; width ve height özellikleri boyutu geçersiz kılar.

YouTube videosu ya da harita yerleştirmek

Video siteleri ve harita hizmetleri sana hazır iframe kodu verir. YouTube'da Paylaş'a, sonra Yerleştir'e bas:

<iframe width="560" height="315"
  src="https://www.youtube.com/embed/VIDEO_ID"
  title="YouTube video player"
  allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
  allowfullscreen></iframe>

Google Maps için yeri aç, Paylaş'a, sonra Harita yerleştir'e bas ve iframe'i aynı şekilde kopyala. title değerini koru (ekran okuyucular çerçeveye girerken onu duyurur) ve sabit boyutları aşağıdaki responsive CSS ile değiştir. allow özelliği çerçeveye, gömülü sayfalarda varsayılan olarak kapalı olan otomatik oynatma ya da tam ekran gibi özellikler verir.

Boyut, kenarlık ve responsive iframe'ler

Kopyalanan yerleştirme kodları telefonlarda taşan sabit piksel boyutları kullanır. width: 100% ile birlikte aspect-ratio, çerçevenin kapsayıcısını doldurmasını ve şeklini korumasını sağlar; border: 0 da varsayılan inset kenarlığı kaldırır:

max-width: 480px değerini başka bir değerle değiştir, çerçeve her genişlikte 16:9 şeklini korur. Tarayıcının varsayılan kenarlığını görmek için border: 0 satırını kaldır. Eski frameborder, scrolling ve marginheight özellikleri artık kullanılmıyor; CSS kullan.

sandbox: çerçevenin yapabileceklerini sınırla

Bir çerçeve, her sayfa gibi script çalıştırabilir, form gönderebilir ve açılır pencere açabilir. sandbox özelliği bu yetkileri elinden alır; boş bir sandbox neredeyse her şeyi engeller ve her anahtar kelime birini geri verir. Aşağıdaki iki çerçeve de küçük bir script içeren aynı HTML'i alır:

İlk çerçeve yer tutucu metnini korur, çünkü script'i hiç çalışmaz (Chrome'un konsolu bunun için bir "Blocked script execution" mesajı yazar). Kullanıcının yazdığı HTML gibi tamamen güvenmediğin içerikleri çerçeve içine aldığında her zaman sandbox kullan ve yalnızca ihtiyaç duyduğu anahtar kelimeleri ekle:

Anahtar kelimeİzin verir
allow-scriptsJavaScript çalıştırmaya
allow-formsForm göndermeye
allow-popupswindow.open ve target="_blank" linklerine
allow-modalsalert(), confirm() ve prompt() çağrılarına
allow-same-originİçeriğin gerçek origin'i olarak ele alınmasına (çerezler, depolama)
allow-top-navigationBütün sekmenin senin sayfandan başka yere götürülmesine

Kendi origin'inden gelen içerik için allow-scripts ile allow-same-origin değerlerini asla birleştirme: çerçevedeki script bu durumda kendi sandbox'ını kaldırabilir.

Bir çerçeveyle konuşmak: postMessage

Dış sayfa ve çerçeve ayrı belgelerdir. Origin'leri farklı olduğunda birbirlerinin DOM'una dokunamazlar, ama mesaj gönderebilirler. Bir mesaj yaz ve onu çerçevenin içine gönder:

Gerçek kodda '*' yerine çerçevenin tam origin'ini ('https://maps.example.com' gibi) ver ve alıcıda e.origin değerini kontrol et, böylece mesajlar yalnızca beklediğin siteye gider ve yalnızca oradan gelir.

Performans ve bir site reddettiğinde

  • Lazy loading. Sayfanın aşağısındaki çerçevelere loading="lazy" ekle; tarayıcı onları ancak okur yakınlarına kaydırdığında yükler. Her iframe tam bir sayfa yüklemesidir, bu yüzden çok sayıda gömülü içerik barındıran bir sayfa bu olmadan yavaşlar.
  • "Bağlanmayı reddetti". Birçok site (bankalar, çoğu sosyal ağ, Google arama), çerçeve içine alınmayı yasaklayan bir X-Frame-Options ya da frame-ancestors header'ı gönderir ve tarayıcı çerçevede bir hata gösterir. Sayfan bunu geçersiz kılamaz. Sitenin resmi yerleştirme URL'sini ya da bir link kullan.
  • Erişilebilirlik. Her zaman title ayarla. Bir ekran okuyucunun çerçeveyi adlandırmasının yolu budur; başlıksız birkaç çerçevesi olan bir sayfada gezinmek zordur.

Sık yapılan hatalar

  • Eksik bir title. Ekran okuyucular çerçeveyi adsız olarak duyurur.
  • Kopyalanan yerleştirme kodundaki sabit genişlikler. Onları width: 100% ve aspect-ratio ile değiştir.
  • Normal bir video dosyasını çerçeve içine almak. Kendi .mp4 dosyan için video elementini kullan; iframe'ler sayfalar içindir.
  • Çerçevedeki içeriğe güvenmek. Senin yazmadığın her şey için sandbox ekle.
  • Dıştaki CSS'in çerçeveye stil vermesini beklemek. Çerçevedeki sayfaya onun içinden stil ver.

Sıkça Sorulan Sorular

HTML'de iframe nedir?

Bir <iframe> (inline frame, satır içi çerçeve), geçerli sayfanın içinde ayrı bir web sayfası gösteren bir kutudur. Kendi belgesi, stilleri ve script'leri vardır; videolar, haritalar, reklamlar ve kod önizlemeleri gibi gömülü içerikler için kullanılmasının nedeni budur.

Bir YouTube videosunu iframe ile nasıl yerleştiririm?

YouTube'da Paylaş'ı, sonra Yerleştir'i seç ve kodu kopyala. Bu, src değeri https://www.youtube.com/embed/ ve video id'si olan bir iframe'dir. title ve allowfullscreen özelliklerini koru, responsive yapmak için de width: 100% ile CSS aspect-ratio: 16 / 9 kullan.

iframe'im neden sitenin bağlanmayı reddettiğini söylüyor?

Site, başka sitelerin onu çerçeve içine almasını yasaklayan bir X-Frame-Options ya da Content-Security-Policy: frame-ancestors header'ı gönderiyor. Birçok site bunu clickjacking'i önlemek için yapar. Kendi sayfandan bunu geçersiz kılamazsın; varsa sitenin resmi yerleştirme URL'sini kullan.

Bir iframe'in kenarlığını nasıl kaldırırım?

CSS'te border: 0 ayarla. Eski frameborder="0" özelliği artık kullanılmıyor, ama kopyalanan birçok yerleştirme kodu hâlâ onu içerir.

Bir iframe'i nasıl responsive yaparım?

CSS'te ona width: 100% ve bir aspect-ratio ver, örneğin video için aspect-ratio: 16 / 9, ve sabit bir yükseklik yazma. iframe böylece kapsayıcısıyla birlikte ölçeklenir ve şeklini korur.

sandbox özelliği bir iframe'de ne yapar?

Boş bir sandbox özelliği çerçevenin içinde script'leri, form gönderimini, açılır pencereleri ve daha fazlasını engeller ve içeriği benzersiz bir origin'den geliyormuş gibi ele alır. Sonra allow-scripts ya da allow-forms gibi anahtar kelimelerle yalnızca gömülü içeriğin ihtiyaç duyduğu şeylere izin verirsin.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA