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ı nameiframe'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) idiframe'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 namebundan çok daha önemlidir id.
Giriş
İframe'e bir nesne olarak srceriş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 framesdiziye hemen girilmez ve frames['testiframe'].location.hrefsözdizimi hemen çalışmaz. Tarayıcı, iframe dizide açılmadan önce, komut dizisinin çalışamayacağı zamana ihtiyaç duyar.
document.getElementById('testiframe').srcSözdizimi her koşulda cezası çalışır.
targetBir 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 nameve bir id.
targetDestek 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.