JavaScript Temelleri

Bölüm 18

Belge Çözümleyicisi Nesne Modeli (Browser Object Model) (BOM)

Bölüm 18 Sayfa 1

18.1 - Belge Çözümleyicisi Nesne Modeli (Browser Object Model) (BOM)

JavaScript yorumlanan bir script programlama dilidir ve JavaScript yorumlayıcısı, bir belge çözümleyicisi programı tarafından konuk edilmelidir. Konuk eden belge çözümleyicisi ortamına, konuk eden ortam (host) adı verilir. JavaScript yorumlayıcısını konuk eden belge çözümleyiciler ticari programlardır ve her belge çözümleyici üreticisinin belge çözümleyicisinde konuk ettiği JavaScript yorumlayıcısı diğerlerinden farklıdır.

JavaScript yorumlayıcısı, nesne teknolojisine göre organize edilmiştir. En tepe nesne window nesnesidir. Diğer tüm nesneler bu nesnenin alt nesneleri olarak tanımlanırlar. JavaScript window nesnesi, daha önce çekirdek nesneleri konusunda incelemiş olduğumuz, Global JavaScript Nesnesi olarak işlev yapar.

Çekirdek nesnelerini incelerken görmüş olduğumuz gibi, ECMA-262 standartları, sadece programlama yöntemlerini kapsar ve giriş çıkış ortamına ait detayları, JavaScript yorumlayıcısını konuk eden belge çözümleyici ortamına bırakır. Bu şekiilde konuk her konuk eden ortama ait JavaScript yorumlayıcısı diğerlerinden farklı olurken, eğer, ECMA-262 uyumlu ise desteklediği çekirdek nesneleri standart ve diğerleri ile aynıdır. Bu nedenle, JavaScript programlarında, çekirdek nesneleri ile çalışılan kısımlar, bu standardı destekleyen tüm belge çözümleyicilerince sorunsuz olarak çalışırlar. Sorun, JavaScript yorumlayıcısının, ECMA-262 standartları dışındaki kısımlarından kaynaklanmaktadır.

Modern işletim sistemlerinde, programlar pencereler içinde görüntülenirler ve işletim sistemleri, pencerelerin açılması, kapanması, yer değiştirmesi gibi çeşitli kolaylıklar içerirler. JavaScript yorumlayıcısının, çekirdek nesneler dışında kalan kısmı, pencere yöntemine JavaScript program adımlarında da sağlanabilmesi için, işletim sistemi ile ilişki kurulması ve koordinasyon sağlanması amacına yöneliktir. Bu nedenle, JavaScript yorumlayıcısının, çekirdek nesneler dışında kalan kısmına Belge Çözümleyisi Nesnesi Modeli (Browser Object Model) (BOM) adı verilir. Belki de, teknik olarak Window Object Model ifadesi daha doğru olabilirdi.

BOM yöntemleri, belge çözümleyicilere özgüdür ve bu nedenle belirli bir standart ile düzenlenmiş değillerdir. Dünyada kullanılan belge , çözümleyiciler, genel olarak iki temel motora dayalı olarak oluşturulmuşlardır. Bunlardan ilki, Microsoft tarafından geliştirilen Internet Explorer (MSIE) motoru, diğeri ise, eski Netscape grubu tarafından geliştirilen, FireFox ve diğer belge çözümleyicilerinin kullandığı, GECKO motorudur. Kullanıcıların yüzde yetmişbeş kadarı, sürüm 8 ye ulaşan MSIE ve türevlerini kullanırken, geri kalan kullanıcılar, GECKO temeline dayanan belge çözümleyicileri, kullanmaktadırlar. GECKO temeline dayanan belge çözümleyicileri arasında, özellikle sürüm 3.0 a ulaşan açık kaynak FireFox belge çözümleyicisi kullanılmaktadır. Son günlerde, 9.64 sürümüne ulaşan OPERA belge çözümleyicisinin de kullanımı artmaktadır. Bazı kullanıcılar FireFox belge çözümleyisinin LINUX işletim sistemi altında çalışan versiyonunu kullanırken, bazıları da salt LINUX işletim sistemine özgü Konqueror ve Apple tarafından Windows sürümü de çıkarılmış SAFARI belge çözümleyicilerini kullanabilirler. Son günlerde Google tarafından geliştirlen Chrome belge çözümleyici de çok kullanılmaktadır. Ayrıca, FreeBSD, Solaris, diğer farklı UNIX türleri gibi işletim sistemleri altında çalışan çeşitli belge çözümleyici türleri de kullanılabilir. Butün bu belge çözümleyici türleri, BOM yöntemlerinin kendi özel yazılımlarını geliştirmiş ve bu yazılımlar, kendi yöntemlerine bağlı olan çok sayıda kuruluş tarafından kullanımda olmasından dolayı bu konuda belirli bir standart üzerinde birleşme sağlanabilmesinin ne kadar güç olabileceğini ortaya koymaktadır. Bu nedenden dolayı BOM yöntemleri ECMA-262 standartları dışında tutulmuştur. Aslında, teknik olarak belirli bir standart etrafında uyuşmanın önünde hiçbir engelin olmadığı, sorunun belge çözümleyicilerini üretmekte olan kuruluşlardan kaynaklandığı herkesin paylaştığı bir düşüncedir. BOM yöntemlerinde belirli bir standardın olmamaması, web geliştiricileri için büyük bir sorun yaratmakta ve bu konuda bir anlaşmaya varılması için çaba sarfedilmesi için çalışılmaktadır.

Dünyada kullanılan belge çözümleyicilerinin yüzde yüzüne yakını Internet Explorer ve FireFox belge çözümleyicilerinden oluşmaktadır. Her iki belge çözümleyici de ücretsiz olarak dağıtılmaktadır. Bu nedenle, bu çalışmada, BOM yöntemlerinden sadece her iki belge çözümleyide desteklenebilen yöntemler incelenmiş ve uygulanmıştır. Bu şekilde, olanaklar ölçüsünde uygulamaların ortak olarak desteklenmeleri sağlanmaya çalışılmıştır.

18.2 - JavaScript window Nesnesi

JavaScript window nesnesi, konuk eden ortam tarafından düzenlenmiş JavaScript yorumlayıcısının tepe sınıfı olarak da adlandırılan en üst düzey sınıfıdır. Bu sınıf, global JavaScript nesnesi olarak hareket eder. Çekirdek nesneleri dışında, bu nesnenin window, history, location, navigator, frames, screen ve document alt nesneleri bulunmaktadır. Alt nesnelerin herbirine ait, özellik, metot ve alt nesneler tanımlanmıştır. Her alt nesne ayrı olarak incelenecektir.

(X)HTML kodlama sistemine göre, her bir belge tek bir işletim sistemi penceresinde görüntülenir ve her pencerede sadece bir tek JavaScript kod çalıştırma ortamı bulunabilir. Her kod çalıştırma ortamında da, sadece bir tek JavaScript window nesnesi bulunabilir.

Çekirdek nesnelerinin dışında olan tüm nesneler, belirli bir standarda bağlı değillerdir ve sadece JavaScript yorumlayıcısını oluşturan kuruluş tarafından düzenlenmişlerdir. Buna rağmen, bu yazılımlar birçok ortak olarak desteklenen öğeler içermektedir.

JavaScript window nesnesinin, çekirdek nesneleri dışında, içerdiği window, history, location, frames ve screen nesneleri, açılmış olan pencerenin tümünü hedefleyen yöntemleri içerirler. Bu yüzden bu yöntemlere, BOM yöntemleri adı verilir. Bu nesneler içinde, navigator alt nesnesi, açılmış olan pencereyi açan belge çözümleyicisini belrlemeye yarayan yöntemleri içerir. En sonuncu document alt nesnesi ise, pencerenin içerdiği belge ögeleri ile ilgilidir ve bu yüzden, document alt nesnesinin yöntemlerine Belge Nesne Modeli, (Document Object Model = DOM) adı verilir. DOM yöntemlerinin standartlaşmaması çok sakınca yarattığından, W3C bu yöntemleri bir standart altında toplamaya çalışmaktadır. Her JavaScript yorumlayıcısı, kendine özgü DOM yöntemleri yanında, W3C-DOM spesifikasyonunu da sınırlı olsa da desteklemektedir.

JavaScript window nesnesinin alt nenelerinin özelliklerine,

window. window.close();

window.history.back(-1); 

window.document.getElementsByTagName('p');
		

şeklinde erişilebilir. Burada window nesnesi, arsayılan tepe nesne olduğundan açıkça belirtilmeyebilir. Bu durumda, alt nesnelere erişim,

window.close();

history.back(-1); 

document.getElementsByTagName('p');
		

şekline indirgenebilir. JavaScript window nesnesinin, window alt nesnesinin özellikleri, varsayılan tepe nesnesi olan window nesnesinin özellikleri olduğundan, basitleştirmede bir adım ileri gidilip

window.close();
		

yerine, sadece

close();
		

olarak belirtilebilir. Fakat, hedeflenen alt nesnenin belirli olması için, genel olarak ilk şekil, yani window.close() şeklinde kullanım, tercih edilir. Bunun için uygulamada window alt nesnesinin özellikleri, window nesnesi özellikleri olarak kabul edlir.

Aşağıdaki tablolarda, JavaScript window nesnesinin özellik metot ve alt nesneleri, destekleyen belge çözümleyicileri ile birlikte aşağıda verilmiştir.

Tablo : 18-1 - window Nesnesinin Metotları
Metot İşlev Destek
alert Bir alert Diyalog Penceresi Açar. MSIE, GECKO, OPERA
ORTAK DESTEK
atob 64 bit Temeline Göre Kodlanmış Bir Karakter Dizgisi (String) Değerin Kodunu Çözümler. GECKO
back Bir Sayfa Geriye GECKO
attachEvent Bir Özel Fonksiyonu Bir Olay Dinleyicisine Bağlar. MSIE
blur İlgiyi Kaldırır. MSIE, GECKO, OPERA
ORTAK DESTEK
btoa 64 bit Temeline Göre Kodlanmış Bir Karakter dizgisi (String) Oluşturur. GECKO
captureEvents Bir olay yöneticisi yaratır. (Artık Kullanımda Değil) GECKO
clearInterval Tekrarlı Bir İşlemi İptal Eder. MSIE, GECKO, OPERA
ORTAK DESTEK
clearTimeout Gecikmeli Bir İşlemi İptal Eder. MSIE, GECKO, OPERA
ORTAK DESTEK
close Pencereyi Kapatır. MSIE, GECKO, OPERA
ORTAK DESTEK
confirm Bir Onay Kutusu Açar. MSIE, GECKO, OPERA
ORTAK DESTEK
createPopup Bir pop-up Penceresi Açar. MSIE
detachEvent Belirtilen Fonksiyonun Belirtilen Olayı Dinlemesini Kaldırır. MSIE
dump Bir Konsol Mesajı Yazar. GECKO
escape Bir Karakter Dizinini (str)Kodlar . GECKO
execScript Verilen Dilde Bir Script Programını Çalıştırır. MSIE
find Bir Karakteri Arar. GECKO
forward Belgeyi History listesindeki bir sayfa ilerisi ile Değiştirir. GECKO
getAttention Uyarı Işığı ile Bir Uygulamaya Dikkati Çeker. GECKO
getComputedStyle Bir Elementin Tüm Hesaplanmış CSS Özelliklerini Döndürür. GECKO
getSelection Seçilmiş Nesnelerin selection Nesnesini Döndürür. GECKO
home Ana Sayfaya Geri Döndürür. GECKO
focus İlgiyi Odaklar. MSIE, GECKO, OPERA
ORTAK DESTEK
moveBy Belirtilen x ve y Kayma Değerlerine Göre Pencerenin Ekrandaki Yerini Değiştirir. MSIE, GECKO, OPERA
ORTAK DESTEK
moveTo Belirtilen x ve y Mutlak Değerlerine Göre Pencerenin Ekrandaki Yerini Değiştirir. MSIE, GECKO, OPERA
ORTAK DESTEK
navigate Belirtilen URL Değerini Geçerli Pencereye Yükler. MSIE
open Yeni Bir Pencere Açar ve Verilen URL Değerini Yükler. MSIE, GECKO, OPERA
ORTAK DESTEK
openDialog Bir Diyalog Penceresi Açar. GECKO
print Sayfayı Yazdırmak için Yazıcı Diyalog Kutusunu Açar. MSIE, GECKO, OPERA
ORTAK DESTEK
prompt Mesajlı Bir Diyalog Kutusu Açar ve Kullanıcının Girdiği Karakter dizgisi (str) Değerini Geri Döndürür. MSIE, GECKO, OPERA
ORTAK DESTEK
releaseEvents Pencerenin Belirli Tipte Olayları Dinlemesini Sona Erdirir. (Devam Ettirilmiyor) GECKO
resizeBy Açılmış Pencerenin Kordinatlarına Belirli Bir x ve y Uzunluklarını Ekleyerek Boyutlarını Değiştirir. MSIE, GECKO, OPERA
ORTAK DESTEK
resizeTo Açılmış Pencerenin Boyutlarını, Mutlak x (Genişlik) ve y ( Yükseklik) Değerlerini Atayarak Değiştirir. MSIE, GECKO, OPERA
ORTAK DESTEK
scroll Açılmış Bir Pencerenin İçeriğini, Sağa Doğru x ve Sola Doğru y Değeri Ekleyerek Göre, Aşağıya Doğru Kaydırır. MSIE, GECKO, OPERA
ORTAK DESTEK
scrollBy Açılmış Bir Pencerenin İçeriğini, Sağa Doğru x ve Sola Doğru y Değerleri Ekleyerek, Aşağıya Doğru Kaydırır. MSIE, GECKO, OPERA
ORTAK DESTEK
scrollByLines Açılmış Bir Pencerenin İçeriğini, Belirli Sayıda Satır Ekleyerek, Aşağıya Doğru Kaydırır. GECKO
scrollByPages Açılmış Bir Pencerenin İçeriğini, Belirli Sayıda Sayfa Ekleyerek, Aşağıya Doğru Kaydırır. GECKO
setActive Açılmış Bir Pencereyi Üzerine İlgiyi Odaklamadan Aktif Hale Getirir. MSIE
setInterval Belirli Bir İşlemi, Belirli milisaniye Aralıkları ile Tekrarlar. MSIE, GECKO, OPERA
ORTAK DESTEK
setTimeout Belirli Bir İşlemi Belirli Bir Milisaniye Süresi Geçince Çalıştırır. MSIE, GECKO, OPERA
ORTAK DESTEK
showHelp Bir Yardım Diyalog Penceresi Açar. MSIE
showModalDialog Bir Modal Diyalog Penceresi Açar ve Belirli Bir HTML Belgesini Görüntüler. MSIE GECKO, OPERA
ORTAK DESTEK
showModelessDialog Modal Olmayan (Kapanma Onayı Olmayan) Bir Diyalog Penceresi Açar ve Belirli Bir HTML Belgesini Görüntüler. MSIE
sizeToContent Açılmış Pencereyi İçeriğine Göre Boyutlar. GECKO
unescape Bir alert Diyalog Penceresi Açar. GECKO
updateCommands Bir alert Diyalog Penceresi Açar. GECKO

Tablo : 18-2 - window Nesnesinin Olay Yöneticileri
Olay Yöneticisi İşlev Destek
onabort Penceredeki abort İşlemlerini izler. GECKO
onactivate Bir Nesne Aktif Hale Geldiğinde, Belirtilmiş İşlemleri Başlatır. MSIE
onafterprint Nesnenin Bulunduğu Sayfa, Yazdılırdıktan veya Yazma Önizlenmesi İçin Açıldıktan Sonra, Belirli İşlemleri Başlatır. MSIE
onbeforedeactivate Nesnenin Bulunduğu Sayfada, Aktif Element Deaktive Olur ve Bir Başkası Aktif Hale Gelirse Belirli İşlemleri Başlatır. MSIE
onbeforeprint Nesnenin Bulunduğu Sayfa, Yazdılırdıktan veya Yazma Önizlenmesi İçin Açılmadan Önce, Belirli İşlemleri Başlatır. MSIE
onbeforeunload Nesnenin Bulunduğu Sayfa, Kapanmadan Önce, Belirli İşlemleri Başlatır. MSIE
onblur Nesne üzerinden İlgi Odağı Kalkınca, Belirli İşlemleri Başlatır. MSIE, GECKO, OPERA
ORTAK DESTEK
onchange Penceredeki Değişim Olaylarına Tepki Verir. GECKO
onclick Mouse ile Tıklamalara Tepki Verir. GECKO
onclose Pencere Kapatılmaya Çalışıldığında, Belirli İşlemleri Başlatır. GECKO
oncontrolselect Nesnenin Kontrol Seçimi Yapıldığında, Belirli İşlemleri Başlatır. MSIE
ondeactivate Aktif Nesne Aktivitesini Yitirdiğinde, Belirli İşlemleri Başlatır. MSIE
ondragdrop Sürükle-Bırak İşlemleri Yapıldığında, Belirli İşlemleri Başlatır. GECKO
onerror Bir Nesne Yüklenirken, Hata Oluşursa, Belirli İşlemleri Başlatır. MSIE, GECKO, OPERA
ORTAK DESTEK
focus Bir Nesne Üzerinde İlgi Odaklandığında, Belirli İşlemleri Başlatır. MSIE, GECKO, OPERA
ORTAK DESTEK
onhelp Pencere Aktif Durumdayken Kullanıcı F1 Tuşuna Bastığında, Belirli İşlemleri Başlatır. MSIE
onkeydown Aktif Pencerede Klavye Tuşunun İndirilmesi ile Belirli İşlemleri Başlatır. GECKO
onkeypress Aktif Pencerede Klavye Tuşunun Basılması ile Belirli İşlemleri Başlatır. GECKO
onkeyup Aktif Pencerede Klavye Tuşunun Kaldırılması ile Belirli İşlemleri Başlatır. GECKO
load Bir Pencere Yüklendiğinde, Belirli İşlemleri Başlatır. MSIE, GECKO, OPERA
ORTAK DESTEK
onmousedown Aktif Pencerede mousedown Olayı ile Belirli İşlemleri Başlatır. GECKO
onmousemove Aktif Pencerede Aktif Pencerede mousemove Olayı ile Belirli İşlemleri Başlatır. GECKO
onmouseout Aktif Pencerede Aktif Pencerede mouseout Olayı ile Belirli İşlemleri Başlatır. GECKO
onmouseover Aktif Pencerede mouseover Olayı ile Belirli İşlemleri Başlatır. GECKO
onmouseup Aktif Pencerede mouseup olayı ile Belirli İşlemleri Başlatır. GECKO
onmove Bir Nesne Hereket Ettiğinde, Belirtilmiş İşlemleri Başlatır. MSIE
onmoveend Bir Nesnenin Hereketi Sona Erdiğinde, Belirtilmiş İşlemleri Başlatır. MSIE
onmovestart Bir Nesnenin Hereketi Başladığında, Belirtilmiş İşlemleri Başlatır. MSIE
onpaint Aktif Pencerede Boyama İşlemleri Başladığında Belirli İşlemleri Başlatır. GECKO
onreset Aktif Pencerede Reset İşlemleri Başladığında Belirli İşlemleri Başlatır. GECKO
resize Bir Nesnenin Boyutu Değiştiğinde, Belirli İşlemleri Başlatır. MSIE, GECKO, OPERA
ORTAK DESTEK
onresizeend Bir Nesnenin Boyut Değiştirmesi Sona, Erdiğinde, Belirtilmiş İşlemleri Başlatır. MSIE
onscroll Aktif Pencerenin İçeriği Kaydırıldığında Belirli İşlemleri Başlatır. MSIE, GECKO, OPERA
ORTAK DESTEK
onselect Aktif Pencerede Seçme İşlemleri Başladığında Belirli İşlemleri Başlatır. GECKO
onsubmit Aktif Pencerede Submit İşlemleri Başladığında Belirli İşlemleri Başlatır. GECKO
onunload Aktif Pencerede, Bir Nesnenin Yüklenmesinin İptali, ile Belirli İşlemleri Başlatır. MSIE, GECKO, OPERA
ORTAK DESTEK

window Nesnesinin alt nesnelerinin sınıflandırılması üzerine oluşmuş bir fikir birliği yoktur. Microsoft kaynakları, alt nesneleri, "Özellikler" (Properties), "Alt Nesneler" (Objects);, "Koleksiyonlar" (Collections) olarak üç ayrı grupta incelerken, Mozilla kaynakları, alt nesneler üzerinde hiç bir sınıflandırma yapmayarak tümünü alt nesne olarak belirtmektedir. Mozilla grubunun yaklaşımı aslında daha tutarlı gibi görünmektedir. Gerçekten, window Nesnesinin alt nesnelerinin birbirlerinden farkı yoktur. Hepsi de birer alt nesnedir. Farklılıklar belki de bunlardan bazılarının başka alt nesnelere sahip olmaması, bazılarının ise geniş bir alt nesne ailesine sahip olmalarıdır. Bunlar arasındaki fark sadece bu noktadadır ve bu ayrım da sadece bir tanımdan ibarettir. Temel nesne nitelikleri hepsi için aynıdır. Biz de çalışmalarımızda, Mozilla sisteminin yaklaşımlarını benimseyerek, tüm alt nesneleri, "Alt Nesne" olarak bir tek grupta inceleyeceğiz. Doğal olarak, her nesne diğerinden yapısı, işlevi, uygulaması ve içerdiği alt neneleri ile farklı olacaktır. Fakat teknik açıdan, alt nesnelerin yapıları, birer nesne olarak, birbirlerinin aynıdır.

Tablo : 18-3 - window Nesnesinin Özellik ve Alt Nesneleri
Özellik İşlev Destek
clientInformation Belge Çözümleyicisi Hakkında Bilgiler İçerir. MSIE
clipboardData Önceden Tanımlanmış Clpboard Formatlarına Erişim Sağlar. MSIE
closed Geçerli Pencerenin Kapanmış Olup Olmadığını Kontrol Eder. MSIE, GECKO, OPERA
ORTAK DESTEK
Components XPCOM Özelliklerine Giriş Noktası. GECKO
content Geçerli Pencerede content Elementinin Referansını Döndürür GECKO
controllers Geçerli Pencerede controller Nesnesini Döndürür GECKO
crypto Geçerli Pencerede crypto Nesnesini Döndürür GECKO
defaultStatus Geçerli Pencerenin Alt Tarafındaki Durum Çubuğundaki varsayılan Metni Geri Döndürür veya Oluşturur. MSIE, GECKO, OPERA
ORTAK DESTEK
dialogArguments Modal Diyalog Penceresine Aktarılan Değişken veya Dizileri Döndürür. MSIE
dialogHeight Modal Diyalog Penceresinin Yüksekliğini Belirler veya Döndürür. MSIE
dialogLeft Modal Diyalog Penceresinin Sol Koordinatını Belirler veya Döndürür. MSIE
dialogTop Modal Diyalog Penceresinin Üst Koordinatını Belirler veya Döndürür. MSIE
dialogWidth Modal Diyalog Penceresinin Genişliğini Belirler veya Döndürür. MSIE
directories directories Araç Çubuğuna bir Referans Değerini Döndürürür. GECKO
document Pencerenin İçerdiği Belgenin Referansını Döndürür. MSIE, GECKO, OPERA
ORTAK DESTEK
event Bir Olayın Durumunu Döndürür. MSIE
external Bir Dış Uygulamanın Nesne Modeline Giriş Bilgilerini İçerir. MSIE
frameElement Pencerenin İliştirilmiş Olduğu Elementi veya İlişik Değilse, null Değerini Döndürür. MSIE, GECKO, OPERA
ORTAK DESTEK
frames Belgenin İlişik Olduğu Tüm window Nesnelerinin Toplu Bilgisini (Koleksion) verir. MSIE, GECKO, OPERA
ORTAK DESTEK
history Kullanıcının Ziyaret Ettiği Tüm Sitelerin Bilgisini Verir. MSIE, GECKO, OPERA
ORTAK DESTEK
innerHeight Belge Çözümleyisi Penceresinin Yüksekliğini Eğer Görüntüleniyorsa, Yatay Kaydırma Çubuğu Yüksekliği ile Birlikte Verir. GECKO
innerWidth Belge Çözümleyisi Penceresinin Genişliğini Eğer Görüntüleniyorsa, Dikey Kaydırma Çubuğu Genişliği ile Birlikte Verir. GECKO
length Bir Topluluk (Koleksiyon) İçindeki Nesnelerin Sayısını Döndürür veya Belirler. MSIE, GECKO, OPERA
ORTAK DESTEK
location window Nesnesinin Lokasyonunu, Yani Geçerli URL adresini Geri Döndürürür. MSIE, GECKO, OPERA
ORTAK DESTEK
locationbar Belge Çözümleyicisinin Yer İmi Çubuğunu Görüntüler veya Gizler. GECKO
menubar Belge Çözümleyicisinin Menü Çubuğunu Görüntüler veya Gizler. GECKO
name Bir Pencerenin Adını Belirten Bir Değeri Döndürür veya Belirler. MSIE, GECKO, OPERA
ORTAK DESTEK
navigator navigator Nesnesinin Referansını Döndürür. MSIE, GECKO, OPERA
ORTAK DESTEK
offscreenBuffering Kullanıcıya Görününmeden Önce bir Nesnelerin Ekran Dişına Çıktığını Belirler veya Döndürür. MSIE
opener Geçerli Pencereyi Açan Pencerenin Referansını Belirler veya Geri Döndürür. MSIE, GECKO, OPERA
ORTAK DESTEK
outerHeight Belge Çözümleyicisi Penceresinin Dış Yüksekliğini Döndürür. GECKO
outerWidth Belge Çözümleyicisi Penceresinin Dış Yüksekliğini Döndürür. GECKO
pageXoffset Belge Çözümleyicisi Penceresinin İçeriğinin Sağa Kaydırılması (Scroll) ile Saklı Kalan Kısmını Döndürür. GECKO
pageYoffset Belge Çözümleyicisi Penceresinin İçeriğinin Aşağıya Kaydırılması (Scroll) ile Saklı Kalan Kısmını Döndürür. GECKO
personalbar Pencerede Görüntülenip Gizlenebilen Kişiye Özel Çubuğun Durumunu Döndürür veya Belirtir. GECKO
pkcs11 Driver veya Özel Programlar Yerleştirilmesi İçin Kullanılan PKCS11 Protokol Nesnesini Döndürür. GECKO
parent Geçerli Pencerenin veya Alt Çerçevenin İlk Atasının Referansını Geri Döndürür. MSIE, GECKO, OPERA
ORTAK DESTEK
returnValue Modal Diyalog Penceresinden Girilen Değeri Belirler veya Döndürür. MSIE
screenLeft Belge Çözümleyicinin Üst Sol Köşesinin X Koordinatını Döndürür. MSIE
screenTop Belge Çözümleyicinin Üst Köşesinin Y Koordinatını Döndürür. MSIE
screenX Belge Çözümleyicisinin Sol sınırının Pencerenin Solundan Uzaklığını Döndürür. GECKO
screenY Belge Çözümleyicisinin Tepesinin Pencerenin En Üstünden Uzaklığını Döndürür. GECKO
scrollMaxX Belgenin İçeriğinin Kaydırılabileceği En Fazla Uzunluk. GECKO
scrollMaxY Belgenin İçeriğinin Kaydırılabileceği En Fazla Genişlik. GECKO
scrollX Belgenin İçeriğinin Kaydırılmış Olduğu Genişlik. GECKO
scrollY Belgenin İçeriğinin Kaydırılmış Olduğu Yükseklik. GECKO
self Geçerli Pencerenin veya Alt Çerçevenin Referansını Geri Döndürür. MSIE, GECKO, OPERA
ORTAK DESTEK
sidebar Sidebar (Kenarlık) Nesnesinin Pencere Referansını Döndürür. GECKO
status Geçerli Pencerenin Durum Çubuğunda Görüntülenen Mesajı Geri Döndürür veya Görüntülenecek Yeni Bir Mesaj Oluşturur. MSIE, GECKO, OPERA
ORTAK DESTEK
top Geçerli Pencerenin En Üst Düzey Sınıfını Geri Döndürür. MSIE, GECKO, OPERA
ORTAK DESTEK
window Geçerli Pencere Referansını Döndürür. GECKO

Yukarıdaki tablolarda görülen özellik, metot, olay yöneticileri ve alt nesnelerin bir kısmı sadece belirli bir belge çözümleyicisine özgü iken, bazıları da ortak olarak desteklenmektedir.

18.3 - window Nesnesinin Metotları

window Nesnesinin metotları, Tablo 12-1 de görülmektedir. Bu tabloda, ortak olarak desteklendiği belirtilen metotlar arasında ilk olarak, open() metodu incelenecektir. Bunun nedeni, bu metodun JavaScript alt pencerelerinin açılması için kullanılması ve birçok metodun da açılmış alt pencereler üzerinde uygulanmasıdır.

18.3.1 - window.open() Metodu

Bu metot, alt pencere olarak da nitelendirilen, ikincil bir belge çözümleyicisi penceresi açar. Bu metodun sözdizimi, en genel şekliyle,

objPENCERE_REFERANS_DEĞİŞKENİ = window.open(strURI,strİSİM,[strPencere_Nitelikleri], [boolYERİNE_GEÇ]);

şeklinde belirtilir. Burada,

Tablo 18.4 - window.open Metodunun Parametreleri
objPENCERE_REFERANS_DEĞİŞKENİ Pencere referansı olarak da adlandırılan, Nesne (Object) tipinde bir değişken. Bu değişkenin değeri, window .open ()metodunun geri dönüş (return) değeridir ve açılan bir pencerenin metot ve alt nesnelerine erişim sağlar. Pencere bir nedenle açılmazsa değeri null olarak geri döndürülür.
strURI Karakter dizgisi (str) tipinde URI yer imi literali. Bu Karakter dizgisi literali, dosya sistemi üzerinde bir dosya adı, bir Web belgesi, bir resim dosyası veya belge çözümleyicinin destekleyebildiği başka bir tip dosya adı olabilir.
strİSİM İsteğe Bağlı Karakter dizgisi (str) tipinde bir literal. Bu isim, bir <form> veya bir<a> elementinin target niteliğinin değeri olarak kullanılır. Bu değer, açılan pencerenin <title> elementinin içeriği değildir. Bu literal hiçbir boşluk karakteri içermemelidir.
_blank strURL değeri yeni ve isimsiz bir pencereye yüklenir.
_parent strURL değeri geçerli pencerenin ilk atasına yüklenir. Bu olmadığı durumlarda _self gibi etki yapar.
_self Geçerli belde, strURL değeri ile belirtilen yeni belge ile yer değiştirir.
_top strURL değeri yüklenebilecek bir frameset ile yer değiştirir. Bu olmadığı durumlarda _self gibi etki yapar.
strPencere_Nitelikleri İsteğe bağlı bir karakter dizgisi (str) listeral listesi. Bu liste, virgül ile ayrılmış, karakter dizgisi literallerden oluşur. Her liste elemanı, bir opsiyonu belirten literal, bir eşit işareti ve bir opsiyon değerinden oluşur. Örnek olarak, "left=40 px, fullscreen=yes,..." şeklinde bir liste düzenlenebilir. Desteklenen pencere nitelikleri Tablo 12-5 de listelenmiştir.
boolYERİNE_GEÇ Sadece MSIE tarafından desteklenen isteğe bağlı mantıksal (boolean) tipte bir parametre. Bu değer true ise, strURL literali, belge çözümleyicisinin history listesinde geçerli belgenin yerini alır. Eğer bu parametrenin değeri false ise, strURL değeri, belge çözümleyicisinin history listesinde kendine yeni bir yer açar.

Tablo : 18-5 - window.open Metodu İle Açılacak Alt Pencerelerin Nitelikleri
NitelikİşlevDestek
alwaysLowered Bu nitelik, UniversalBrowserWrite ayrıcalığı gerektirir. Bu ayrıcalığa sahip olunmazsa, gözardı edilir. Eğer 1 olarak belirtilirse, kendisini açan ve küçültülmemiş olan pencerenin altında yüzen bir pencere açılır. Bu niteliğe sahip pencererelere "pop-under" adı verilmektedir. Bu tip pencereler, kendini açan üst düzey pencerenin üstünde olamaz, fakat üst düzey pencere küçültülebilir. MSIE, GECKO, OPERA
alwaysRaised Bu nitelik, UniversalBrowserWrite ayrıcalığı gerektirir. Bu ayrıcalığa sahip olunmazsa, gözardı edilir. Eğer 1 olarak belirtilirse, aktif olsun veya olmasın, diğer pencerelerin üstünde yüzen bir pencere açılır. GECKO
channelmode Sadece MSIE sürüm 7 öncesinde desteklenen bu özellik açılacak pencereyi tiyatro gösterimi moduna getirir. (ARTIK DESTEKLENMİYOR !) MSIE
chrome Mozilla 1.7 ve FireFox 0.9 dan başlayarak desteklenen bu nitelik, UniversalBrowserWrite ayrıcalığı gerektirir. Bu ayrıcalığa sahip olunmazsa, gözardı edilir. Bu özellik, sadece kullanıcı tarafından kontrol edilebilecek, standart özelliklerden kurtulmuş bir pencere açar. XUL belgeleri ve JavaScript konsolları genellikle bu şekilde açılır. GECKO
close Bu nitelik, UniversalBrowserWrite ayrıcalığı gerektirir. Bu ayrıcalığa sahip olunmazsa, gözardı edilir. Bu nitelik no olarak belirtilirse, belge çözümleyicinin pencereyi kapatma tutamağı ve menüdeki kapat seçeneği iptal edilir. GECKO
dependent Eğer 1 olarak belirtilirse, yeni pencere eskisinin çocuğu olarak açılır. Yani, ana pencere kapanırsa çocuk da kapanır. Açılan yeni pencere, eskisinin görev çubuğunda görünmez. GECKO
dialog Eğer evet olarak belirtilirse, açılacak pencerenin başlık çubuğundaki tüm ikonlar (restore, minimize, maximise) kaldırılır. GECKO
directories Eğer 1 olarak belirtilirse, yeni pencerede standart pencere düğmeleri olacaktır. Varsayılan değer 1 dir. MSIE, GECKO
fullscreen Bu özelliğin dikkatle kullanılması gerekir. Çünkü, açılacak pencere tüm ekranı kaplar ve üzerinde belge çözümleyicisinin başlık çubuğu ve menüleri bulunmaz. Kullanıcıya bu pencereyi kapatmak için bir olanağın tanınması gerekir. MSIE
height Açılacak pencerenin piksel olarak yüksekliğini belirtir. MSIE 7 için minimum yükseklik 150 pikseldir. Önceki sürümler ve GECKO motorlu belge çözümleyiciler 100 piksel değeri destekler. Eğer görüntüleniyorsa, yatay kaydırma çubuğu genişliği de yüksekliğe dahildir. MSIE, GECKO, OPERA
innerHeight Pencerenin iç yüksekliğini piksel olarak belirtir. height ile aynıdır. GECKO
innerWidth Pencerenin iç genişliğini piksel olarak belirtir. width ile aynıdır. GECKO
left Piksel olarak pencerenin sol kenarının ekranın sol kenarından uzaklığını belirtir. Bu değer 0 veya pozitif bir tamsayı olmalıdır. MSIE, GECKO, OPERA
location Evet olarak ayarlandığında, açılacak pencere içinde bir standart URI giriş alanı açar. MSIE, GECKO, OPERA
menubar Evet olarak ayarlandığında, açılacak pencerede standart menu bar (File, Edit, View, vs.) gibi öğelerle oluşturulur. MSIE, GECKO
minimizable GECKO motorunu kullanan belge çözümleyicilerde ve sadece dialog pencerelerinde çalışır. Evet olarak ayarlandığında, açılacak dialog penceresi, küçültme düğmesini içerir. GECKO
modal Bu nitelik, UniversalBrowserWrite ayrıcalığı gerektirir. Bu ayrıcalığa sahip olunmazsa, gözardı edilir. Evet olarak ayarlandığında, kullanıcı açılan pencereyi kapatmadan ana pencereye dönemez. Modal bir pencereye örnek olarak, alert() penceresi gösterilebilir. GECKO
outerHeight height ile aynıdır fakat, sadece GECKO temelli belge çözümleyicilerde çalışır. GECKO
outerWidth width ile aynıdır fakat, sadece GECKO temelli belge çözümleyicilerde çalışır. GECKO
personalbar directory ile aynıdır fakat, sadece GECKO temelli belge çözümleyicilerde çalışır. GECKO
resizable Eğer evet olarak ayarlanırsa, yeni açılacak pencerenin boyutları değiştirilebilir. MSIE, GECKO
screenX left ile aynıdır fakat, sadece GECKO temelli belge çözümleyicilerde çalışır. (Artık Devam Ettirilmiyor !) GECKO
screenY top ile aynıdır fakat, sadece GECKO temelli belge çözümleyicilerde çalışır. (Artık Devam Ettirilmiyor !) GECKO
scrollbars Evet olarak ayarlandığında, yeni açılacak belge, eğer viewport ölçülerine uymazsa, yatay ve dikey kayma çubukları ile birlikte görüntülenecektir. MSIE, GECKO
status Evet olarak ayarlandığında, yeni açılacak pencerenin altında, durum çubuğu görüntülenecektir. MSIE, GECKO
titlebar Sadece GECKO temelli belge çözümleyicilerde çalışır. Bu tip belge çözümleyicilerde alt pencereler daima bir başlık çubuğu ile açılır. Eğer, hayır olarak ayarlanırsa, bu nitelik GECKO temelli belge çözümleyicilerde açılan alt pencerelerdeki başlık çubuğunu görüntülemez. GECKO
toolbar Evet olarak ayarlandığında, yeni açılacak pencerenin altında, alet çubuğu (Back, Forward, ve Stop) görüntülenecektir. MSIE, GECKO
top Piksel olarak pencerenin üst kenarının ekranın üst kenarından uzaklığını belirtir. Bu değer 0 veya pozitif bir tamsayı olmalıdır. MSIE, GECKO, OPERA
width Piksel olarak pencerenin genişliğini belirtir. Minimum genişlik değeri MSIE 7 den önce 100 pikseldi. MSIE, GECKO, OPERA
z-lock alwaysLowered ile aynıdır. GECKO

Yukarıdaki tabloda,MSIE, FireFox ve Opera'nın tümünün birden destekleyebildiği sadece 6 tane nitelik olabildiği görülür. Bunlar, alwaysLowered, height, left, top, width, location nitelikleridir. Kullanıcısı sayısı az ve desteklediği nitelik sayısı kısıtlı olan Opera belge çözümleyicisinin açılan pencere niteliklerini desteklemesi beklenen belge çözümleyicileri arasından çıkartılırsa, sadece MSIE ve FireFox belge çözümleyicilerinin ortaklaşa desteklediği,

left, top, height, width, location, directories, toolbar, menubar, resizable, scrollbars, status

olarak 11 adet ortak olarak desteklenebilen nitelik, açık internet belgelerinde kullanılabilir. Diğerlerinin, şimdilik kapalı intranet belgelerinde değerlendirilmesi ile yetinilmelidir.

JavaScript iki tür pencereyi ayırdeder. Bunlar,

olarak ayırdedilir.

Bir pencere referansı olmadan açılan pencereler, sistem pencereleri olarak adlandırılan, işletim sisteminden yararlanılarak ve biraz ileride göreceğimiz, window.open metodu ile aynı programda bir pencere referansına atanmadan açılmış olan veya başka JavaScript programları tarafından açılmış olan pencerelerdir. JavaScript sadece kendisi tarafından açılmış pencere referansı belli olan ve kendi işletim sistemi sayfası olan pencerelerle bilgi alışverişi yapabilir. Diğer pencerelere erişemez.

JavaScript window nesnesi, tüm diğer nesneler gibi, referansla aktarılır. Bu nesnesnin özelliklerine erişim için, atanmış olduğu değişkene pencere referans değişkeni denilir. Pencere referans değişkeni, global bir değişkendir. Bu değişkeni fonksiyon alanı dışında veya bir fonksiyon alanı içinde var bildirimi yapılmadan tanımlamak gerekir. Aksi halde, pencere referans değişkeni sadece fonksiyon alanında tanımlı olabilecek ve fonksiyonun çalışması sona erince tanım da erişebilirliğini yitirecektir.

Alt pencere açılıca, diğer açık pencerelerle, üst sınıf/ alt sınıf ilişkisi kalmayacağından, açılan alt pencerelerin alt nesneleri ile metot, özellik ve olay yöntecilerine erişebilmek için mutlaka bir global pencere referans değişkeninin tanımlanmış olması gerekir.

window.open('URI', 'isim', '...' bildiriminin ilk parametresi, Bir karakter dizgisi literali veri tipinde olan URI değeri, mutlak ve bağıl URI değerleri olabileceği gibi, boş bir karakter dizgisi de olabilir. Bu durumda, URI değeri about:blank olan boş bir alt pencere, belirtilen niteliklerle veya eğer nitelikleri belirtilmemişse, varsayılan donatılar ve boyutlarda açılır.

İkinci parametre olan 'isim'; parametresi, en kritik ve anlaşılması güç olan bir değerdir. Bu parametre, bir çerçeve (frame) sistemini oluşturan pencerelerin ismidir. Bir çerçeve sistemi olmadığı durumlarda, bu pencereler, JavaScript window.open() metodu ile veya (X)HTML çapa elementinin target niteliğinde belirtilen isimle açılmış olabilir.

Normal olarak (X)HTML çözümleyicisi, açtığı belge çözümleyicisi pencerelerine bir isim vermez. Bu tip pencerelere, sistem pencereleri adı verilir. Açık bir sistem penceresi içine yüklenmiş bir (X)HTML belgesinden, <a href="merhabaDunya.htm">Merhaba Dünya !</a> şeklinde bir çapa elementinin çağrısı ile bir başka sayfa çağrılırsa, açık isimsiz sistem penceresinin içeriği boşaltılır ve çağrılan belge, pencerenin yeni içeriği haline gelir. Bu bağlantıyı lütfen deneyiniz.

Pencere yüklendikten önce ve sonra, sistemde sadece bir tane açık olan pencere bulunmakta olduğuna dikkat edilmelidir. Değişen sadece açık ve isimsiz sistem penceresinin içeriği olmuştur. Aynı pencereye, yeni bir belge yüklendiğinde, yeni belgenin history belleğinde, eski belgenin URI değeri bulunmaktadır. Bu şekilde, yeni belge yüklendiğinde, back düğmesi ile eski belge yeniden yüklenebilmekte, buradan forward düğmesi ile yeniden yeni belgeye dönülebilmektedir.

Sistem pencereleri, isimli olarak da açılabilirler. Eğer, yeni pencere, çapa elementinin target niteliği belirtilerek, <a href="MerhabaDunya.htm" target="ilk_pencere">pencere ismi</a> şeklinde açılırsa, durum çok farklı olacaktır. Bu durumda, yeni belgenin yüklenmesi için, ismi ilk_pencere olan bir pencere hedef gösterilmektedir. Sistemde bu isimde açık bir pencere varsa, yeni belge bu pencerenin yeni içeriği olacaktır. Sistemde bu isimde açık bir pencere yoksa, bu isimle yeni bir pencere açılacak ve belge bu yeni pencereye yüklenecektir. Bu taktik çoğunlukla ürün bilgilerini açık pencereyi etkilemeyecek şekilde sunmak isteyen web siteleri tarafından uygulanır. Örnek olarak,

<a href = "../uygulamalar/merhabaDunya.htm" target = "ilk_pencere">sayfayı aç</a>
		

Bu bağlantıyı lütfen deneyiniz. Bağlantı gerçekleştiğinde, sistemde iki tane açık belge çözümleyici penceresi olduğu ve en son açılan yeni pencerenin geçmiş belleğinde, çağıran belgenin URI bilgisinin olmadığı görülecektir. Yani, yeni açılan pencerenin back düğmesi çalışmayacaktır. Çünkü bu pencere yeni açılmıştır ve ilk içeriği de yeni yüklenmiştir.

Bundan sonraki, işleyiş aynı şekilde devam edecektir. Yeni bağlantılar, açık olan pencerelerden birini hedef gösterdiğinde, belgeler bu pencerelere yüklenecek, hedef olarak belirtilen isimde açık bir pencere yoksa, bu isimde yeni bir pencere açılarak, belge bu yeni pencereye yüklenecektir. Bu şekilde, duruma göre sonsuz sayıda yeni pencere açılabilir. Açılan her yeni pencerenin sistem kaynaklarını kullandığı da unutulmamalıdır. Bu nedenle, sistemde elden geldiği kadar az açık pencere tutulmasında yarar bulunmaktadır.

Yeni belgelerin, yeni pencerelere yüklenmesini sağlayacak bir hedefin target ="_blank" şeklinde bildirilmesi olanağı da bulunmaktadır. Bu durumda, isimsiz bir yeni sistem penceresi açılarak belge bu pencereye yüklenecek, doğal olarak back düğmesi bu durumda da çalışmayacaktır.

Çapa elementinin yönlendirme olanağından yararlanılarak açılan tüm pencereler XHTML işaretlemesinden yaralanılarak açılmış olan sistem pencereleridir. Bu pencerelerin açılması için, kullanıcı belge çözümleyicisinin JavaScript yorumlayıcısının devre dışı bırakılmış olması veya pop-up pencere engelleyicilerinin etkin olması bir engel oluşturmaz. Fakat açılan pencereler sistem pencereleridir ve bu pencerelerin düzeni üzerinde hiçbir kontrolümüz yoktur. Programcıların düzenlenmesini kontrol edebildikleri pencereler ancak JavaScript window.open () metodunun uygulanması ile açılabilir. Bunun için de ön koşul, kullanıcıların bilgisayarlarında JavaScript yorumlayıcısının etkin olması ve pop-up pencere engelleyicilerinin bulunmamasıdır.

Görüldüğü gibi, window.open( 'URI', 'isim', '...' metodunun ikinci parametresi, (X)HTML çözümleyicisinin değerlendirdiği pencere adıdır. Pencere adı, sadece açılış sırasında, çapa elementinin target niteliğinin değeri olarak veya alt pencere açılırken window.open( 'URI', 'isim', '...' metodunun ikinci parametresinin değeri olarak belirtilebilir.(X)HTML ile açık bir pencerenin isminin değiştirilebilmesi olanağı yoktur. Sadece JavaScript ile, window.name niteliğinin değerinin değiştirilmesi ile değiştirilebilir. Bu yöntemi kısa süre sonra, window.name niteliği ile birlikte inceleyeceğiz. Bunun dışında, açılan pencerelerin isimleri, açıldıkan sonra hiçbir şekilde değiştirilemez ve kapanmalarına kadar aynı ismi taşırlar.

Görüldüğü gibi, window.open( 'URI', 'isim', '...' metodunun ikinci parametresi, sadece, (X)HTML çözümleyicisinin hedef pencere olarak değerlendirdiği, karakter dizgisi (string) tipinde bir değerdir. Bu değer, çapa elementinin, target niteliği ile aynı işleve sahiptir. Çağıran çapa elementine bir target niteliği vermek ve bu değeri de açılacak pencere ismi olarak atamak, alışılagelmiş bir uygulama olarak kabul edilmektedir. Çapa elementinin, target niteliğinin değeri, JavaScript yorumlayıcısının pencere niteliklerini kontrol ettiği, pencere referans değişkeni değildir. Bu değer ayrıca açılan alt pencerenin <title> elementinin içeriği de değildir. Biraz ileride görüleceği gibi, <title> elementinin oluşturularak, açılacak alt sayfanın içeriğine ayrıca eklenmesi gerekir.

Çapa elementinin target niteliği, katı kuralcı (strict) XHTML 1.0 spesifikasyonunda iptal edilmiş fakat XHTML 1.1 spesifikasyonunda yeniden desteklenmeye başlanmıştır. En son spesifikasyon XHTML 1.1 olduğundan, bu konudaki sorunlar tamamen çözüme kavuşmuş ve çapa elementinin target niteliği belirtilmiş belge kodlamaları eğer geçerli XHTML 1.1 belgeleri ise, W3C kod değerlendiricisi bu belgeleri geçerli belgeler olarak kabul etmeye yeniden başlamıştırt Bu durumda XHTML 1.0 da yaşanmış olan kod değerlendirme sorunları geçmişte kalmıştır. Bu yeni ve olumlu durum, çerçeve sistemleri ile çalışılması ve isimli pencerelerin açılması işlemlerini çok kolaylaştırmaktadır.

window.open( 'URI', 'isim', '...' Metodunun ikinci parametresinin "" şeklinde boş bir karakter dizgisi olarak kullanılması durumunda, Internet Explorer her defasında yeni bir pencere açarken, Firefox ilk açlacak pencerenin ardından, açılacak tüm belgeleri aynı pencereye yükleyecektir. Genel olarak, window.open( 'URI', 'isim', '...' metodunun ikinci parametresinin, boş bir karakter dizgisi olarak kullanılması uygun değildir.

window.open( 'URI', 'isim', '...' Metodunun üçüncü parametresi, açılacak alt pencerenin donatıları ile ilgilidir. Bu parametre hiç kullanılmazsa, açılacak alt pencere, varsayılan donatılarla açılır. Bu parametre, "" şeklinde boş bir karakter dizgisi olarak verilirse, açılacak alt pencerede, başlık çubuğu dışında hiç bir donatı bulunmayacaktır.

window.open( 'URI', 'isim', '...', '...' Metodunun dördüncü parametresi, sadece Internet Explorer de çalıştığı için, kamuya açık Internet de değil, kapalı Intranet yayınlarında kullanılması sağlık verilir.

window.open( 'URI', 'isim', '...' Metodunun , kısa olarak sadece open() olarak kullanılması doğru değildir. JavaScript yorumlayıcısı, statik nesnelerin kökenini yukarı doğru tarar. Burada ilk yapılandırma, document.open() şeklinde olacak ve bu ifade, geçerli olacağı için daha yukarı kökenlerine doğru arama yapmayacaktır. Bu durumda, window.open() ifadesi yerine, document.open() ifadesi çalıştırılacak ve yeni bir pencere açılması yerine, yeni bir belge açılacaktır.

Bir alt pencerenin içeriği, uzak bir bigisayarda bulunan bir dosya olabilir. Uzak bir noktadaki URI belgesinin anında indirilip, açılan alt pencerenin içeriğini anında doldurmasının beklenmemesi gerekir. Burada, ilk olarak boş bir pencere açılacak, sonra istenen belge verilen URI adresinden indirilerek, açılmış olan boş pencere içeriği ile yer değiştirecektir. Pencerenin yaratılması içeriğinin yüklenmesi, asenkron olarak gerçekleşecektir. Bütün bu işlemler, zaman alıcı işlemler olacağından, açılan alt pencerenin içeriğinin doldurulması biraz zaman alabilir.

Bir alt pencerenin açılması, kullanıcıya ek bir bilginin sunulması anlamına gelmektedir. JavaScript işlevselliğinin belge çözümleyicisinde kapatılmış olması veya başka bir nedenle alt pencerenin açılması engellenirse, kullanıcı önemli bir bilgi kaynağından yoksun kalacaktır. Bu durumun engellenmesi için, pop-up pencereler daha önce gördüğümüz, "Aşamalı Geliştirme" ve "Farkedilmeden Kayboluş" prensiplerinin uygulandığı sadece sayfadaki bilgilerin vurgulandığı, açılmadıklarında bilgi kaybına neden olmayacak dikkatli hazırlanmış içeriklerle oluşturulması sağlık verilir.

Alt pencereleri açacak programların, HTML/XHTML/XML olay yöneticilerinin algılayacağı olayları gerçekleştirerek veya bir bağlantıyı tıklayarak çalıştırılması gerekir. Bu çalıştırma yönteminin, "Farkedilmeyen Kayboluş" prensibine göre, Javascript çalışmasa da en azından sayfanın açılmasını sağlayarak kullanıcının bilgiden yoksun kalmasını önlemesi beklenir. Uygulamalarda, olanaklar ölçüsünde bu amacın sağlanmasına çalışılmalıdır. Aşağıdaki örneklerde bu işlevselliğin sağlanma yöntemleri açıklanmıştır.

Bir sayfanın açılma onayını daima kullancıya bırakmak gerekir. Sayfa yüklendiğinde, kullanıcının kontrolü dışında sayfa ile birlikte otomatik olarak açılan pencereler, reklem amacı taşımasalar bile kullanıcıyı tedirgin eder. Buna ek olarak, dikkati çekmek amacı ile bu pencereler görüntü alanı içinde dolaştırılırsa, kullanıcının irkilmesi artar ve bu sitede zararlı kodların olabileceği kuşkusunun oluşmasına neden olabilir. Kullanıcı bu siteleri acele olarak terketme eğilimine girebilir ve bu hiç istenmeyen bir durumdur.

Açılan pencerler konusunda inceleyeceğimiz ilk örnek, kullanılması sağlık verilmeyen bir yöntem olan, JavaScript pseudoprotokolunu kullanan bir uygulamadır. JavaScript pseudoprotokolunu sayfada JavaScript programlarını çalıştımak için kullanılan ve aslında uzak durulması gereken bir yöntemdir. Bu yöntem, bölüm 1.1.3 de incelenmişti. Aşağıda kodları görülen, program, açılan pencerelerinin açılması için JavaScript pseudoprotokolunu kullanmaktadır.


/* <![CDATA[  */

function pencereAç(URI) {

pencereRef = window.open(URI, 'otobusTarifesi',
'resizable=yes,toolbar=yes,location=yes,scrollbars=yes,' +
'menubar=yes,width=780,height=400,top=200,left=800');

pencereRef.focus();  // Açık pencere nesnesini yeniden ilgi odağına getir.
}


/* ]]>  */
		

Bu program bağlantılı olduğu örnek sayfasında, aşağıda görüldüğü gibi çalışmaktadır.

...
<ul id="center-navlist">
<li id="ilk">
<a href="javascript:void pencereAç('../uygulamalar/tarifeler.htm');"><em>Otobus Tarifesi</em></a>
</li>
</ul>
...
		

Yukarıdaki örnekte görülen,

<a href="javascript: void pencereAç('../uygulamalar/tarifeler.htm');"
		

şeklindeki ifade, çapa elementinin href niteliğinin yorumlanmasında, bir URI değerinin aranmasının değil, bir JavaScript ifadesinin çalıştırılacağını belirtir. Bu ifadede void bildirimi, geriye bir değer döndürülmeyeceğini belirtir. JavaScript komutlarının bu şekilde çalıştırılmasına, "JavaScript Pseudo (Sahte)-Protokolu" adı verildiği, 1.1.3 de açıklanmıştı. Tekrar hatırlamak için, tanımları yeniden inceleyelim. İletişim protokolu, uzak siteler arasında belge transferinde, iletişim standartlarının sağlanması için kullanılan bir kodlama sistemidir. Pseudo(sahte) protokol, görünüşte protokola benzeyen, fakat protokol olmayan bir program kısmı anlamına gelir. Yukarıdaki örnekte görülen, JavaScript pseudo-protokolu, çapa elementinin bağlama fonksiyonunu ortadan kaldırdığı için bir "kırık bağlantı" türü yaratır ve böylelikle, bağlantı değil, JavaScript ifadesi çalışarak pencere açılır. JavaScript pseudo-protokolu, sayfada JavaScript programlarının çalıştırılabilmesi için, bir olanak sağlamasına karşın, sayfada bazı erişilebilirlik ve kullanılabilirlik sorunları yaratabilir. Bu sorunlar, aşağıda kısaca belirtilmiştir:

Bütün bu nedenlerden dolayı, JavaScript pseudo-protokolundan uzak durmak gerekmektedir. Biz de çalışmalarımızda, çok gerekli olmadıkça JavaScript pseudo-protokolunu kullanmamaya çalışacağız.

Yukarıdaki programda olumsuz olan JavaScript pseudo-protokolu kullanımı dışında, olumlu olan birçok nokta da bulunmaktadır. Bu noktaların yakından izlenmesi yararlı olacaktır.

Yukarıdaki programda , olumsuz yönleri olan global değişkenlerin kullanılması yerine, Jonathan Snook tarafından önerilen window global nesnesine bir özellik eklenmesi yoluna gidilmiştir. JavaScript programlama dilinde, global değişken tanımı ile, global nesne görevini yapan window nesnesine bir özellik eklenmesi aynı anlama gelmektedir. Bu nedenle , olumsuz yönleri olan global değişken tanımı yerine window nesnesine bir özellik eklenmesi daha olumlu olabilir. Açılan pencere referanslarının global olarak tanımlanması yararlıdır. Çünkü, açılan bir pencere içeriğine başka bir fonksiyondan erişim sağlanması gerektiğinde, bu pencerenin referansına ancak global olarak tanımlanmış olması durumunda başka bir fonksiyon tarafından erişilebilir. Bu programda, pencere içeriğine, pencerinin açıldığı fonksiyondan başka bir fonksiyondan erişim yapılması gerekmemesine karşın yine de pencere referansı global olarak fakat window global nesnesinin bir metodu şeklinde tanımlanmaktadır

Yukarıdaki programda açılmış olan isimli pencerelerin yeniden açılmaması için JavaScript programına bir yöntem konulmamış olduğu görülmektedir. Bu kontrol, bu konuda daha yetenekli olan, (X)HTML çözümleyicisine bırakılmıştır. (X)HTML çözümleyicisi, belirli bir isimle açılmış olan pencerelerin, henüz açık durumda iken, aynı isimle yeniden açılmasına olanak vermez. Bu konuda JavaScript programlarına ek bir yük yüklemek gerekli değildir. Kontrolün (X)HTML tarafından üstlenilmesini sağlamak için açılacak pencerelerin bu programda olduğu gibi bir isim verilerek açılması yeterlidir.

Açılan alt pencere, yeni bir pencere olarak açılırsa, otomatik olarak ön plana alınacak ve ilgi üzerine odaklanacaktır. Eğer, açılacak olan alt sayfa, mevcut bir pencerenin yeni içeriği olacak şekilde açılırsa, arka planda kalacaktır. Bu durumda, kullanıcı, gözünün önünden kaybolan alt pencereyi arayarak vakit kaybedebilir. Bunun önlenmesi için, arka plana düşmüş olan alt pencerenin, yeniden ön plana taşınması ve ilginin üzerine yoğunlaştırılması gerekir. Bu, amaçla, kısa süre sonra inceleyeceğimiz, window nesnesinin,focus() metodundan yararlanılmaktadır. Bu şekilde, açılan pencerenin her zaman kullanıcının gözönünde tutulması sağlanmış olmaktadır.

JavaScript pseudoprotokuluna gerek olmadan açılan bir pencere programının yazılması, birçok önemli noktanın dikkate alınmasını gerektirir. Bu programın yazılmasında dikkate alınması gereken noktalar, http://www.accesify.com da açıklanmıştır. Bu konuları gözönüne alan örnek bir programın kodları aşağıda görülmektedir:


/* <![CDATA[  */

function penref() {

window.pencereRef = null;

}


function varsayılanEtkiyiGözardıEt(e) {
if ( window . event) {
 window.event.returnValue = false;
window.event.cancelBubble = true;
}
else if(e) {
e.stopPropagation();
e.preventDefault();
}
}


function pencereAç(URI) {

pencereRef = window.open(URI, 'otobusTarifesi', 'resizable=yes,toolbar=yes,location=yes,scrollbars=yes,' +
'menubar=yes,width=780,height=400,top=200,left=800');

pencereRef.focus();  // Açık pencere nesnesini yeniden ilgi odağına getir.
}


function popup(e) {

pencereAç(this.getAttribute('href'));
			
varsayılanEtkiyiGözardıEt(e); // popup penceresi açılınca çapa elementinin varsayılan etkisinin bloke edilmesi !
			
}


function başlat() {
var bağlantı = document.getElementById('tutamak');
			
penref();

bağlantı.onclick = popup;
			
bağlantı.setAttribute('title', 'popup penceresi olarak açılır !');// thumbnail olarak gösterilir !
}

sayfaYüklenmesiTamamlandıktanSonraÇalıştır(başlat);

/* ]]>  */
		

Bu program, bağlantılı olduğu, sayfada aşağıda görülen çapa elementinin tıklanması ile bir popup penceresi açar.


<ul id="center-navlist">
<li id="ilk">
<a href="../uygulamalar/tarifeler.htm" id="tutamak"><em>Otobus Tarifesi</em></a>
</li>
</ul>
		

Bu uygulama, programların birbirlerinin okunmasını engellememe prensibini tam olarak karşılamaktadır. Çünkü, tüm uygulamalarımızda olduğu gibi, HHTML, JavaScript ve CSS kodları ayrı sayfalarda saklanmakta ve birbirleri ile ilişkilendirilerek bir bütün oluşturulmaktadır. XHTML kodlarında hiç JavaScript ve CSS kodlarının görünmemesinin sağlanması hedefine ulaşılabilmesi amacı ile XHTML kodlarında, elementlerin olay yöneticileri ve stil nitelikleri kullanılmamakta, elementlerin stil nitelikleri ve olay yönetimi tüm olarak sayfaya ilişkilendirilmiş CSS ve JavaScript program sayfalarında çözümlenmektedir.

Bu uygulama, Javascript programlarının aşamalı geliştirme (progressive enhancement) ve farkedilmeden kayboluş, (graceful degradation) prensiplarini tam olarak karşılamaktadır. Sayfada JavaScript sadece açılan sayfanın ekrandaki konumunu, boyutlarını ve niteliklerini düzenleyerek açılan pencerenin kullanıcının gözüne hoş görünmesini sağlamak işlevini yüklenmektedir. JavaScript kullanıcının belge çözümleyicisinde çalışmıyorsa, sayfanın çapa elementinin işlevi açık kalmakta ve bağlantı çalışır halde kalarak, tıklandığında yine açılan pencere açılmakta fakat nitelikleri, JavaScript tarafından yapılabilecek iyileştirmelerden yoksun kalmaktadır. Bu şekilde, JavaScript sayfanın erişilebilirliğini azaltıcı bir etkiye neden olmamaktadır.

Kullanıcının belge çözümleyicisinde, JavaScript yorumlayıcısı çalışır durumda ise, çapa elementinin biçeriğine tıklandığında, çapa elementinin href niteliğinde belirtilen URI bilgisine göre sayfanın açılmasını JavaScript programı sağlayacaktır. Bu durumda, çapa elementinin işlevselliği bloke edilmelidir. Bu işlem için, return false bildirimi yeterli olabilir. Fakat, belge çözümleyicilerin özel kodları daha etkilidir. Bu kodlar, IE ve Mozilla tabanlı belge çözümleyiciler için farklı olduklarından, her ikisi için geçerli olan kodların programda yazılması gerekmektedir. Programda varsayılanEtkiyiGözardıEt() fonksiyonu bu işlevi sağlmaktadır. Bu fonksiyon, bdelib.js program kitaplığına alınmıştır.

Tüm programda, URI bilgisinin sadece, çapa elementinin hrf niteliğinin değeri olarak belirtilmesine dikkat edilmiştir. Bunun nedeni, sayfanın bir site düzenleyicisi, örnek olarak Adobe DreamWeaver ile düzenlenmesinde, sayfanın site içinde yeri değişebildiğinde, site düzenleyicisi, URI bilgilerinin de yeni yerleşime göre düzenlenmesini sağlayabilir. Eğer bir URI bilgisi JavaScript programı içinde belirtilmiş ise otomatik olarak düzeltime olanağı bulunamaz. Bu yüzden, bu uygulamada olduğu gibi, URI bilgilerinin sadece XHTML kodları içinde belirtilmesinde yarar bulunmaktadır.

Yukarıdaki program, tüm belge çözümleyicilerde ortak olarak çalışabilen, sayfanın erişilebilirliğini azaltmayan, farkedilmedem kaybolabilen, açılan pencereler için örnek olabilecek bir programdır. Tüm açılabilir pencereler için, bu programdaki, yöntemlerin uygulanmasına özen gösterilmelidir.

Bazı durumlarda birden çok alt pencere açılması gereği olabilir. Bu pencerelerden yenilerinin açılıp, eskileri gereksiz yere açık olarak arka planda kalacağına, yeni pencereyi eskisinin ismi ile yeniden açmak, sistem kaynakları açısından, daha verimli olacaktır. Bu durumda, yeni belge, açık olan belge çözümleyicisi alt penceresinin yeni içeriği haline gelecek ve sistem gereksiz yere açık olarak arka planda bekleyen alt pencerelerin kaynakları kullanmasından kurtarılmış olacaktır. Bu yöntemin kullanıldığı bir program aşağıda görülmektedir. Bu program, bağlı olduğu uygulama sayfasında çalışmaktadır.


/* <![CDATA[  */


function penref() {

window.pencereRef = null;

}


function pencereAç(URI) {

/*Not: Eğer isim parametresi ile bir 
boş karakter dizgisi (str) literal veya _blank
değil geçerli bir karakter dizgisi (str) literal
veriliyorsa ve bu isim ile sistemde açık bir pencere varsa, 
yeni bir pencere (window) değil, aynı pencerede , içeriği, 
bu fonksiyonun URI argümanının işaret ettiği belgenin 
içeriği olan yeni bir belge (document) açılacaktır.
Yani, aynı isimli açık pencerenin içeriği değişecektir*/


pencereRef=window.open(URI, "Tarifeler", 'resizable=yes,toolbar=yes,location=yes,scrollbars=yes,menubar=yes,width=780,height=400,top=200,left=800');
pencereRef.focus();  // Açık pencere nesnesini yeniden ilgi odağına getir. 

}

function otobüsTarifesi() {
var
bağlantı = document.getElementsByTagName('a');

for (var i = 0; i < l < bağlantı.length; i++ ) {
if ( bağlantı[i]. rel == 'otobus') {
pencereAç(bağlantı[i].getAttribute('href'));
}
}
varsayılanEtkiyiGözardıEt();//popup penceresi açılınca çapa elementinin varsayılan etkisinin bloke edilmesi
}


function vapurTarifesi() {
var
bağlantı = document.getElementsByTagName('a');

for (var i = 0; i < l < bağlantı.length; i++ ) {
if ( bağlantı[i]. rel == 'vapur') {
pencereAç(bağlantı[i].getAttribute('href'));
}
}
varsayılanEtkiyiGözardıEt();//popup penceresi açılınca çapa elementinin varsayılan etkisinin bloke edilmesi
}


function uçakTarifesi() {
var
bağlantı = document.getElementsByTagName('a');

for (var i = 0; i < l < bağlantı.length; i++ ) {
if ( bağlantı[i]. rel == ucak') {
pencereAç(bağlantı[i].getAttribute('href'));
}
}

varsayılanEtkiyiGözardıEt();//popup penceresi açılınca çapa elementinin varsayılan etkisinin bloke edilmesi
}

function başlat() {
var
bağlantı = document.getElementsByTagName('a');

penref();

for (var i = 0; i < l < bağlantı.length; i++ ) {
if ( bağlantı[i].rel == otobus') {
olayDinleyicisiEkle(bağlantı[i], 'click', otobüsTarifesi);
}

if ( bağlantı[i].rel == 'vapur') {
olayDinleyicisiEkle(bağlantı[i], 'click', vapurTarifesi);
}

if ( bağlantı[i].rel == 'ucak') {
olayDinleyicisiEkle(bağlantı[i], 'click', uçakTarifesi);
}
}
}


sayfaYüklendiktenSonraÇalıştır(başlat);

/* ]]>  */
		

Bu programın geliştirilmesinde, sayfanın yapısının sonradan değiştirilmesinin progamı etkilememesine dikkat edilmiştir. Çapa elementlerinin rel nitelikleri, bu elementlerinin tanımlanmsı için bir tür kimlik niteliği gibi kullanılmaktadır.

Bazı durumlarda, içeriği sistemde kayıtlı dosyalar olmayan alt pencerelerin açılması istenebilir. Bu tip alt pencerelerin içerikleri, çalışma anında (on the fly) oluşturulur. Bu tür Pencerelerin görüntüleri ve içerikleri, programın çalışması sırasında oluşturulduğundan, hem büyük ölçüde işlem gücüne gereksinme duyulur hem de bu pencerelere kapsamlı bir içerik sağlamak için, büyük sayıda program adımı içermesi gereken bir program kodlaması gerekir. Bu nedenle, kayıtlı olmayan pencerelerin içeriği olarak, pratikte ancak mesaj nitelikli kısa bilgiler verilebilir. Yine de, bu tip pencereler, istendiğinde, her türlü mültimedya olanağı ile donatılabilir ve alert() penceresine göre çok daha renkli mesajlar verilmesine olanak sağlayabilir.

Havada uçan, yani içeriğinin kayıtlı bir dosyaya dayanmayıp program adımları ile açık bir pencereye yüklenen alt pencerelerin programlanması hassas ve özenli bir programlama tekniği gerektirir. Bu çalışmada ve bundan sonra yapılacak uygulamalarda, W3C tarafından geliştirilmiş yeni belge nesne modeli (Document Object Model = DOM) yöntemlerini kullanacağız. Bu yöntemler ayrıntılı olarak Bölüm 13 de incelenecektir.

İçeriği JavaScript programı tararfından belilenen havada uçan pencerelere örnek bir uygulama, bir mesaj metni içeren, havada uçan bir penceredir. Kullanıcının belge çözümleyicisi, JavaScript programlarını destelemiyorsa, bu mesajın kullanıcıya ulaştırlamayacağı unutulmamalııdr. Bu nedenle, programın farkedilmefen kaybolabilmesi için, bu tip mesajların eğer statik metin parçaları içeriyorlarsa, bir önceki programda örneği verilmiş olan pop-up pencerleri olarak tasarlanmlarında yarar bulunmaktadır. Bu tip pencereler, ancak, JavaScript tararfından hesaplanmış içerikleri kullanıcıya aktarmak için kullanıldıklarında, kullanımları doğrulanabilir. Bu programın JavaScript kodları, sayfanın XHTMl kodlarından tam olarak ayrılmış ve Internet Explorer'in destekleyebildiği kadarı ile W3C DOM CORE yöntemleri ile, Internet Explorer'in destekleyemediği noktalar ise, W3C-HTMl DOM yöntemleri ile programlanmıştır. Bu program kodları aşağıda görülmekte ve ilişikli olduğu sayfada çalışmaktadır.


/* <![CDATA[  */



function penref() {

window.pencereRef = null;

}


function boşPencere() {
var
altSoy = [],
elementSayısı = 0;

altSoy = pencereRef.document.getElementsByTagName("body").item(0).childNodes;

for (var i = 0; i < altSoy.length; i++ ) {
if (altSoy[i] = 1) {
elementSayısı++;
}
}

return elementSayısı;
}


function pencereKapat() {

pencereRef.close();
}


function pencereİçeriğiniYazdır() {

pencereRef.print();
}



function pencereAç() {

pencereRef = window.open('', 'Yeni_Pencere',
'resizable=yes,toolbar=yes,location=yes,scrollbars=yes,'  + 
'menubar=yes,width=780,height=200,top=450,left=450');
}

function nodEkle(pencere, mesaj) {
var
eklemeYeri = pencere.document.getElementsByTagName('body').item(0),
yeniParagraf = pencere.document.createElement('p'),
düğme1 = pencere.document.createElement('button'),
düğme2 = pencere.document.createElement('button'),
eklenecekMesaj = pencere.document.createTextNode(mesaj);

yeniParagraf.appendChild(eklenecekMesaj);
yeniParagraf.setAttribute('style', 'color : red;');
eklemeYeri.appendChild(yeniParagraf);

if düğme1 (addEventListener) {
düğme1.appendChild(document.createTextNode('Pencereyi Kapat'));
düğme1.setAttribute('style', 'position : relative; left : 250px; float : left; font : 17px verdana; color : white; background-color : red;');
düğme1.onclick = PencereKapat;
eklemeYeri.appendChild(düğme1);

düğme2.appendChild(document.createTextNode('Pencereyi Yazdır'));
düğme2.setAttribute('style', 'position : relative; left : 350px; float : left; font : 17px verdana; color : white; background-color : blue;');
düğme2.onclick = PencereİçeriğiniYazdır;
eklemeYeri.appendChild(düğme2);
return
}

if düğme1 (attachEvent) {
düğme1.value ='Pencereyi Kapat';
düğme1.style.color ='white';
düğme1.style.backgroundColor ='red';
düğme1.style.position ='relative';
düğme1.style.left ='250px';
düğme1.onclick = PencereKapat;
eklemeYeri.appendChild(düğme1);

düğme2.value ='Pencereyi Kapat';
düğme2.style.color ='white';
düğme2.style.backgroundColor ='blue';
düğme2.style.position ='relative';
düğme2.style.left ='350px';
düğme2.onclick = PencereİçeriğiniYazdır;
eklemeYeri.appendChild(düğme2);
}
}


function altPencere() {

pencereAç();

if(boşPencere() ===  0) {  // Pencere İçeriği Boş İse,
nodEkle(pencereRef, 'Her Türlü Mesaj Verilebilir !');
}
}

pencereRef.focus();  // Açık pencere nesnesini yeniden ilgi odağına getir.
}


function başlat() {
penref();
olayDinleyicisiEkle(document.getElementById('buton1'), 'click', altPencere);
}


sayfaYüklendiktenSonraÇalıştır(başlat); 

/* ]]>  */
		

Bu programın açtığı mesaj penceresi, son derece dayanıklıdır. Kullanıcı hiçbir şekilde bu pencerenin içeriğine zarar veremez. Kullanıcı kapatıncaya kadar, bu alt pencere açık kalacaktır.

Kullanıcı alt pencereyi kapatmadan, yeniden açma düğmesine basarsa, pencere isimli ve açık olduğundan, (X)HTML çözümleyici, aynı pencerenin yeniden açılmasına olanak vermez. Ama, JavaScript olanak verirse, içeriği değişebilir. JavaScript de bu olanağı vermeyecektir, çünkü kontroller olumsuzdur. Sadece pencere window.focus() komutu ile, pencere yeniden ilgi odağına taşınacaktır.

Kullanıcı alt pencereyi kapatmadan, ana pencereyi yeniden yükler (tazeleme düğmesine basarak) ve pencere açma düğmesine, yeniden tıklarsa, durum çok can sıkıcı olabilir. Çünkü, bu durumda pencereRef değişkeni yeniden başlangıç değerine güncellenir. Pencere açma kontrolu olumlu hale gelir, aynı adla pencere açık durumda olduğundan yeni pencere açılmaz, fakat içeriği değişebilir. Bunu, açık pencerenin içeriğini kontrol eden eleman sayısının sıfır olmaması önler. Sonuçta alt pencerenin içeriği etkilenmez ve yeniden ön plana taşınır.

Bu şekilde, dayanıklı bir uçan alt pencere açabilme tekniğinin kazanılması büyük önem taşır. Uçan alt pencerelerin içeriği, (X)HTML formatındadır. Bu pencereler her türlü, renkli, mültimedya destekli mesajları verebilirler. Bu mesajlar, kullanıcıyı etkilemek için her türlü şansa sahiptir

Açılan pencerelerin kullanıcıya etkin mesajlar verilebilmesi açısından önemi büyüktür. Daha önceleri görülebilen teknik sorunlar, en son sürüm belge çözümleyicilerle ortadan kalkmış görünmektedir. Buna rağmen, bu pencereler, kullanıcıyı az çok rahatsız edici olabilmektedir. Bu nedenle, bunların kullanımında aşırıya kaçılmaması uygun olacaktır. Görülebilecek sorunların en aza indirilebilmesi için, belge çözümleyicilerin büyük bir çoğunluğu tarafından ortak olarak desteklenen niteliklerin kullanması, ve açılan sayfalara bir isim verilmesi sağlık verilir.

Valid XHTML 1.1