Parça Tanımlayıcılar ile Cross Domain Frame İletişimi

Yazılarımı yazarken genelde ingilizce terimlerin varsa Türkçe karşılıklarını yoksa en yakın anlamlarını kullanmaya çalışıyorum. Ne var ki Türkçe yeterli kaynak olmadığından ve ingilizce kaynaklar çok fazla olduğundan çoğu zaman bir konu ile ilgili arama yaparken ingilizce anahtar kelimeler kullanıyorum. Bu makalenin başlığını da Parça tanımlayıcılar ile çapraz alan adı çerçeve iletişimi olarak yazmak isterdim fakat arandığında bulunabilsin diye mecburen bu şekilde yazmak durumunda kaldım.

Güvenlik gereği tarayıcılar, bir alan adı üzerinde çalışan bir betiğin başka bir alan adı üzerinde çalışan başka bir betik ile haberleşmesine ve/veya ilgili dokümanın özelliklerine erişebilmesine izin vermezler. Pratikte çok işe yarayan bu güvenlik önlemi, her iki alan adına sahipseniz ve bu iki alan adında çalışan uygulamaların iletişim kurmaları gerekliliği söz konusuysa, durum çok can sıkıcı bir hal alabiliyor.

Flash tabanlı uygulamalarda sunucuların kök klasöründe düzgün bir şekilde yapılandırılmış crossdomain.xml dosyası yardımı ile bu sorunun üstesinden gelebiliyorsunuz. (crossdomain.xml ile ilgili daha detaylı bilgiyi adobe sitesinden edinebilirsiniz.) Peki javascript ile çalışırken ne yapılabilir? Bu makalede bu soruya cevap olabilecek bir yöntemden bahsedeceğim.

İşyerinde bir projede karşıma çıkan benzer bir problem için çözüm ararken, delicious üyeliklerim arasında tam da aradığım konuyla ilgili bir yazı buldum. Yazının ana fikri, değiştiğinde sayfanın yenilenmesini gerektirmeyen parça tanımlayıcı (Fragment Identifier) adı verilen url bölümünü kullanarak çerçeveleri konuşturmak.

Parça tanımlayıcılar, bir web sayfası içinde, sayfayı yenilemeden sayfanın içerisinde bağlantılar yardımıyla gezinti yapılabilmesine olanak sağlarlar. http://www.test.com/urunler.html#A-Urunu şeklinde bir bağlantı, sayfa yüklendikten sonra sayfanın A-Urunu olarak işaretlenmiş bölümüne odaklanmasını sağlar. A-Urunu olarak işaretlenmiş bir bölüm yoksa, bu durumda sayfa herhangi bir hata vermez ve özel bir konuma odaklanmaz.

Çerçeveleri konuşturmak için bizim de ihtiyacımız olan tam böyle bir şey. Tek yapmamız gereken A sayfasından, yine A sayfasında yer alan sayfa içi çerçeve (iframe) içinde yer alan B sayfasına veri göndermek için, göndereceğimiz veriyi B sayfasının adres bölümüne parça tanımlayıcı olarak göndermek. B sayfasını da sürekli olarak parça tanımlayıcı kısmı dinleyecek ve yorumlayacak şekilde yapılandırmak. Tam ters mantıkla, A sayfasını dinleyici, B sayfasını veri gönderici şekilde yapılandırarak her iki çerçevenin birbirleriyle iletişim kurmasını sağlayabilirsiniz.

İletişimin boyutu, parça tanımlayıcıların ve dolayısıyla url bölümüne yazılabilecek en yüksek veri miktarı ile sınırlı. Ayrıca sayfa içi çerçeve kullanmak, tarayıcının geri tuşununu da doğru çalışmamasına yol açabilir. Bu iki konu da yöntemin dezavantajları arasında sayılabilir.

Örnek sayfalarının kodlarını inceleyerek anlatmak istediğimi çok daha rahat anlayabilirsiniz.