Javascript popup pencere açmak, özelliklerini kullanmak, sayfaya ortalı popup pencere açmak ve popup pencere içerisinden açılan sayfadan veri çekmek gibi konuları göreceğiz. Javascript ile açılır pencere yapımı için JS fonksiyonlarından windows.open kullanımı gereklidir.
Ayrıca konu ile alakalı olarak sayfa içerisinde tasarımını düzenleyebileceğiniz açılır pencere açmak istiyorsanız jquery modal popup yapımı konulu yazmış olduğum içeriğe göz atabilirsiniz.
Aşağıdaki yapı windows.open komutunun en basit halidir ve ilk parametresine girilen bağlantı yolundaki sayfayı yeni pencere halinde açacaktır.
window.open("https://www.muhammedyaman.com");
window.open("sayfa/index2.php");
Popup pencere içerisinde bir sayfa açmak yerine kendi istediğiniz içeriği göstermek isteyebiliriz. İlk parametreyi boş bırakarak içerisinde web sayfası açılmamasını sağlar ve ardından pencerenin içeriğini aşağıdaki örnekte olduğu gibi document.write fonksiyonu ile istediğimiz şekilde oluştururuz.
var pencere = window.open("","Pencere Ismi", "width=400,height=400");
pencere.document.write("Yeni Sayfa. Ismi: "+pencere.name+""); //pencerenin icerigine yaz
İkinci parametrede aşağıdaki komutlar kullanılabilir.
Üçüncü
parametrede genişliği, yüksekliği, kaydırma çubuğu, yeniden
boyutlandırma gibi özellikler belirtilebilir.
Sayfaya ortalanmış halde istenilen boyutta javascript popup pencere açmak için aşağıdaki fonksiyonu kullanabiliriz.
function PopupCenter(url, title) {
var w = 1090; //pencere genislik
var h = 600; //pencere yukseklik
/*sayfaya ortala*/
var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;
var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;
var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
var left = ((width / 2) - (w / 2)) + dualScreenLeft;
var top = ((height / 2) - (h / 2)) + dualScreenTop;
/*--------------*/
window.open(url, title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); //pencereyi ac
}
Butona tıklayınca popup açmak için onclick özelliğine aşağıdaki şekilde fonksiyonu yazabiliriz. Böylelikle tıklama ile sayfaya ortalı olacak şekilde pencere açılacak ve muhammedyaman.com sitesi pencere içerisinde açılacak. Sunucu içerisindeki bir sayfayı da aynı yöntemle açabiliyoruz.
PopupCenter('http://www.muhammedyaman.com','Pencere Ismi');
PopupCenter('sayfa/index2.php','Pencere Ismi');
Sunucu üzerinde, kendi sitemizden popup pencere üzerinde açılan
sayfadan veri çekme ve pencerenin açıldığı sayfa üzerinde
işlem yapmayı göreceğiz.
Pencere içerisinde açılan sayfa içeriği aşağıdaki gibidir.
Tıkla ve Gonder
Butona tıklanıldığında, bu sayfayı popup pencere içerisinde açan sayfada ‘isim’ ve ‘soy_isim’ id li elemanların içeriğini ‘Muhammed’ ve ‘Yaman’ olarak değiştiriyoruz. Bu sayfayı popupta açan sayfaya windows.opener komutuyla ulaşıyoruz. Sayfadaki bir elemanı seçmek için de document.getElementById(‘isim’) fonksiyonunu kullanıyoruz. Örnek olarak aşağıdaki kod ile pencereyi açan sayfayı yenileyebiliyoruz.
window.opener.location.reload();
Ardından pencereyi windows.close() fonksiyonuyla kapatıyoruz.
Not: Popup pencerede açılan sayfadan veri çekme işlemi yaparken Blocked a frame of origin “null” from accessing a cross-origin frame hatası çıkıyor ise bunun sebebi: Bir önceki sayfaya veri gönderimi yapılması için popup pencere isteği gönderen sayfa ile popup pencere üzerinde açılan sayfanın aynı bilgisayarda veya sunucuda olmasının gerekliliğindendir. CORS (Cross-Origin Request Specification) şeklinde adlandırılan güvenlik önleminden dolayı böyle bir hata çıkar. Bu yüzden html uzantılı dosyalar üzerinde bu kodlar deneniyorsa veri alışverişi olmaz. PHP veya ASPNET gibi dosyalarda aynı sunucu üzerinden yapılan isteklerde veri alışverili sorunsuz gerçekleştirilir.