Quirksmode bu konuda bir yazı yayınladı .
Sayfa artık bozuk olduğundan ve yalnızca archive.org üzerinden erişilebilir olduğundan, burada çoğalttım:
IFrame'ler
Bu sayfada, bulundukları sayfadan iframe'lere erişmeye kısa bir genel bakış sunacağım. Şaşırtıcı olmayan bir şekilde, bazı tarayıcı hususları var.
Bir iframe satır içi bir çerçevedir, ancak kendi URL'sine sahip tamamen ayrı bir sayfa içerirken yine de başka bir HTML sayfasının içine yerleştirilen bir çerçevedir. Bu, web tasarımında çok güzel olanaklar sunar. Sorun, iframe'e erişmek, örneğin içine yeni bir sayfa yüklemek. Bu sayfada bunun nasıl yapılacağı açıklanmaktadır.
Çerçeve veya nesne?
Temel soru iframe'in bir çerçeve mi yoksa bir nesne olarak mı görüldüğü.
- Çerçevelere giriş sayfalarında açıklandığı gibi , çerçeveler kullanırsanız tarayıcı sizin için (
top.frames[1].frames[2]
ve benzeri) bir çerçeve hiyerarşisi oluşturur . İframe bu çerçeve hiyerarşisine uyuyor mu?
- Yoksa tarayıcı bir iframe'i başka bir nesne, src özelliğine sahip bir nesne olarak mı görüyor? Bu durumda standart bir DOM çağrısı kullanmalıyız (
document.getElementById('theiframe'))
erişmek gibi. Genel olarak tarayıcılar 'gerçek' (sabit kodlu) iframe'lerde her iki görünüme de izin verir, ancak oluşturulan iframe'lere çerçeve olarak erişilemez.
NAME özelliği
En önemli kural, bir name
öznitelik oluşturduğunuz herhangi bir iframe'i , bir de kullansanız bile vermektir id
.
<iframe src="iframe_page1.html"
id="testiframe"
name="testiframe"></iframe>
Çoğu tarayıcı name
iframe'i çerçeve hiyerarşisinin bir parçası yapmak için bu özelliğe ihtiyaç duyar . Bazı tarayıcıların (özellikle Mozilla'nın) id
iframe'i bir nesne olarak erişilebilir hale getirmesi gerekir . Her iki özelliği de iframe'e atayarak seçeneklerinizi açık tutarsınız. Ancak name
bundan çok daha önemlidir id
.
Giriş
İframe'e bir nesne olarak src
erişirsiniz ve onun çerçevesini değiştirirsiniz veya iframe'e bir çerçeve olarak erişir ve bunu değiştirirsiniz location.href
.
document.getElementById ('iframe_id'). src = 'newpage.html'; çerçeveler ['iframe_name']. location.href = 'newpage.html'; Çerçeve sözdizimi biraz tercih edilir, çünkü Opera 6 bunu destekler ancak nesne sözdizimini desteklemez.
İframe'e erişme
Bu nedenle, tam bir tarayıcılar arası deneyim için iframe'e bir ad vermeli ve
frames['testiframe'].location.href
sözdizimi. Bildiğim kadarıyla bu her zaman işe yarar.
Belgeye erişme
name
Özelliği kullanmanız koşuluyla, iframe içindeki belgeye erişmek oldukça basittir . İframe'deki belgedeki bağlantı sayısını saymak için yapın
frames['testiframe'].document.links.length
.
Oluşturulan iframe'ler
W3C DOM aracılığıyla bir iframe oluşturduğunuzda, iframe frames
diziye hemen girilmez ve frames['testiframe'].location.href
sözdizimi hemen çalışmaz. Tarayıcı, iframe dizide açılmadan önce, komut dizisinin çalışamayacağı zamana ihtiyaç duyar.
document.getElementById('testiframe').src
Sözdizimi her koşulda cezası çalışır.
target
Bir bağlantının niteliği benim iframe oluşturulan a hem elde ettiğini, ancak Opera dışında oluşturulan iframe'lerle da işe yaramıyor name
ve bir id
.
target
Destek eksikliği, oluşturulan bir iframe'in içeriğini değiştirmek için JavaScript kullanmanız gerektiği anlamına gelir, ancak ilk etapta onu oluşturmak için JavaScript'e zaten ihtiyacınız olduğundan, bunu bir sorun olarak görmüyorum.
İç çerçevelerde metin boyutu
Meraklı bir Explorer 6 sadece hatası:
Metin boyutunu Görünüm menüsünden değiştirdiğinizde, iframe'lerde metin boyutları doğru şekilde değiştirilir. Ancak, bu tarayıcı orijinal metindeki satır sonlarını değiştirmez, böylece metnin bir kısmı görünmez olabilir veya satır yine başka bir kelimeyi tutabilirken satır sonları oluşabilir.