İşte dökümanın kaynağı:
Öncelikle alıcıya kaç tane frame istediğinizi yazıyorsunuz. Eğer
<FRAMESET> içinde rows kullanırsanız sayfa verilen yüzdelerde
satırlara ayrılır. Eğer rows yerine cols kullanırsanız verilen
yüzdelerde iki sütun elde etmiş olursunuz. Aşağıdaki örnek de
Netscape'den...
Bu script iki sütun yaratacaktır ve ikinci sütun 3 eşit satıra
bölünecektir. <FRAMESET> komutundaki 50%,50% yazısı yarattığınız
hücrelerin büyüklüğünü belirtir.
Sanırım frame'lerin ana hatlarını anlamak pek de zor değildir. Şimdi
gelelim yeni bir örneğe:
Bu örnekte ilk frame'deki düğmelere basarak ikinci frame'de yazı
yazıldığını görebilirsiniz.
Önce bize gerekli olan çerçeveleri yaratalım. (frames.html):
frame1.html'de şunlar yazmaktadır:
frame2.html ise:
Vay! Bu script'ler gittikçe uzun olmaya başladı!
Eğer daha önce 'obje'leri gördüyseniz bu size yeni olmayacaktır. Yukarıda
gördüğünüz gibi frame1.html ve frame2.html frame.html tarafından
çağırılmıştır. Bu yüzden frame.html'ye baba (parent), frame1.html ve
frame2.html'ye de çocuk (child) diyoruz. Bu hiyerarşi içinde değişik
frame'ler arasında bağlantı kurulabilir. Bu fikri size Ascii sanatını
kullanarak bir grafik ile anlatmanın daha iyi anlamanız açısından faydalı
olacağına inanıyorum...):
Bu içeriği daha da genişletmek de mümkündür tabii ki. 'torun'
(grandchildren) da yaratabilirsiniz. (Bu resmi bir ad değildir!).
Eğer baba, yani parent frame'de herhangibir şeyi frame2.html'den alıp
işleme sokacaksanız bu durumda fonksiyonu çağırırken 'parent'
ifadesini kullanmak zorundasınız. Alacağınız 'herhangibir şey'in adresi de
'parent' ifadesinden hemen sonra koyacağınız 'fr1' ifadesiyle
alıcınıza anlatılır. (Bu ifadeleri birbirinden ayırmak için nokta (.)
kullanılır.) Peki neden 'fr1' de başka birşey değil ? Aslında fr1'in
hiçbir özelliği yok. Bu sadece frame'e (çerçeveye) verilen addır. Bu adı
ben rasgele seçtim. Bu ad eğer hatırlarsanız frame.html'de tanımlanmıştı.
Bundan sonrası da zaten çok kolay. Peki frame1.html'den frame2.html'deki
fonksiyonu doğrudan nasıl çağırabiliriz? Muhteşem grafiğimde de gördüğünüz
gibi frame1.html ile frame2.html arasında doğrudan hiçbir bağ yoktur. Yani
mutlaka parent (Baba) frame üzerinden dolaşmanız gerekli. Bu yüzden
fonlsiyonu çağırırken nerede olduğunu belirtmek için 'parent.fr1' demek
zorunda kalıyorsunuz. Fonksiyonun bulunduğu yeri tarif ettiğinize göre
artık fonksiyonu da çağırabilirsiniz. Yapmanız gereken tek şey fonksiyonun
adını da bu ifadeye eklemek: parent.fr1.selam()
Bir frame yarattığınız zaman yeni link'e bağlanırsanız frame yok olmaz.
Eğer kullanıcı sayfanızda kalırsa problem yok. Mesela bir konu kısmı
yarattınız. Seçilen konu yandaki boş frame'de görülüyor. Ancak eğer bu
konulardan biri ya da fazlası başka bir internet adresindeyse konu kısmı
istenmeyebilir. Bu durumda frame'i nasıl kaldıracaksınız?
Yapmanız gereken <a href...> komutunuza bir TARGET="_top" ifadesi
eklemektir. Bu durumda izlenen bu link frame'siz bir sayfada oluşacaktır.
Tabii ki konu kısmındaki tüm link'ler dışarı bağlanıyor olabilir. Bu
durumda sayfanızdaki <HEAD> komutları arasına bir <BASE
TARGET="_top"> komutu ekleyebilirsiniz. Bu tüm link'lerin frame'siz bir
sayfada görüneceğini belirtir.
Birçok kişi bana JavaScript ve Frame (Çerçeve)'lerin beraber nasıl
çalıştıklarını sordu. İkisini beraber kullanabilmek için öncelikle iki
olayı da destekleyen bir alıcı kullanmalısınız.
Başlamadan önce size frameler hakkında biraz bilgi vermek istiyorum.
Birçok HTML dökümanı şu anda frameleri içermiyor çünkü frameler yeni
sayılabilir. Frame kullanarak sayfanızı herbiri ayrı bir HTML dökümanı
gösterecek birkaç parçaya ayırabilirsiniz. Ayrıca bu ayrı kaynaklı
sayfalar arasında bağlantı da vardır. Örneğin iki frame yaratırsınız.
Birinde konuları bulundurursunuz. Seçilen konu ikinci frame'de gösterilir.
Böylece tüm konular daima göz önünde kalır. Öncelikle size bunun nasıl
birşey olacağını göstermek istiyorum. Sadece aşağıdaki tuşa basın ve
frame'lerin neye benzediğini görün (Tabii önceden hiç görmediyseniz...).
<HTML>
<HEAD>
<title>Frame'ler</title>
</HEAD>
<FRAMESET ROWS="50%,50%">
<FRAME SRC="frtest1.html" name="fr1">
<FRAME SRC="frtest2.html" name="fr2">
</FRAMESET>
</HTML>
<FRAMESET COLS="50%,50%">
<FRAMESET ROWS="50%,50%">
<FRAME SRC="cell.html">
<FRAME SRC="cell.html">
</FRAMESET>
<FRAMESET ROWS="33%,33%,33%">
<FRAME SRC="cell.html">
<FRAME SRC="cell.html">
<FRAME SRC="cell.html">
</FRAMESET>
</FRAMESET>
Frame'lerinize ad verebilirsiniz. Bu adlar JavaScript'te de işe
yarayacaktır. Yukarıdaki örnekte frame'lerin nasıl ad aldıklarını
gördünüz.
İşte kaynağı:
<HTML>
<HEAD>
<title>Frames</title>
</HEAD>
<FRAMESET ROWS="50%,50%">
<FRAME SRC="frame1.html" name="fr1" noresize>
<FRAME SRC="frame2.html" name="fr2">
</FRAMESET>
</HTML>
<HTML>
<HEAD>
<script language="JavaScript">
<!-- Hiding
function selam() {
document.write("Selam!<br>");
}
function hey() {
document.write("Hey!<br>");
}
function hebele() {
document.write("Hebele Hubele<br>");
}
// -->
</script>
</HEAD>
<BODY>
Bu bizim ilk frame'imiz!
</BODY>
</HTML>
<HTML>
<body>
Bu bizim ikinci frame'imiz!
<p>
<FORM NAME="buttonbar">
<INPUT TYPE="button" VALUE="Selam" onClick="parent.fr1.selam()">
<INPUT TYPE="button" VALUE="Hey" onClick="parent.fr1.hey()">
<INPUT TYPE="button" VALUE="Hebele" onCLick="parent.fr1.hebele()">
</FORM>
</BODY>
</HTML>
Peki, burada neler oldu? Öncelikle ilk dosya yükleniyor(frames.html). Bu
dosya bize gereken çerçeveleri yaratıyor ve bu çerçevelerin içine
dosyaları yüklüyor. Birinci çerçevemize (Adı 'fr1' olan) frame1.html'yi;
ikinci çerçevemize de ('fr2') frame2.html'yi yüklüyor.
Normal HTML'nin işi burada bitiyor. 'frame1.html'de gördüğünüz gibi
JavaScript fonksiyonları tanımlanmış. Fakat bunlar burada çağırılmamış. Bu
fonksiyonlar gereksiz midir? Yoksa ben yanlış yazdığım fonksiyonları
silmeyecek kadar üşengeç biri miyim? Her ne kadar biraz üşengeç olsam da
bu fonksiyonlar aslında gereklidir. Çünkü onlar ikinci çerçevedeki
frame2.html tarafından çağırılmaktadır! Dökümanın başında anlattığımız
düğme yaratma ve onClick özelliğini artık biliyorsunuz. Ancak
parent.fr1... de ne demek?
frames.html parent (Baba)
/ \
/ \
/ \
fr1(frame1.html) fr2(frame2.html) children (Çocuk)
frames.html parent (Baba)
/ \
/ \
/ \
fr1(frame1.html) fr2(frame2.html) children (Çocuk)
/ \
/ \
/ \
gchild1 gchild2 'grandchildren' (Torun)
İşte bu ikinci script'teki onClick özelliğinin yaptığıdır...
11.Mayıs'96
© 1996 - Stefan Koch