JavaScript Pencere Nesnesi (Window Object)

window, tarayıcı sekmesinin/pencerenin en üst (global) nesnesidir. Sayfa yüklenmesi, URL yönlendirme, açılır pencere yönetimi, zamanlayıcılar, ekran ölçüleri ve bazı tarayıcı API’lerine erişim gibi işlemler bu nesne üzerinden yapılır.

Modern Not
Eski kaynaklarda “toolbar, menubar, status, location” gibi seçeneklerle pencereyi kontrol etmek anlatılır. Ancak modern tarayıcılar güvenlik ve kullanıcı deneyimi nedeniyle bu ayarların çoğunu yok sayabilir. En güvenilir kullanım: boyut/konum + noopener/noreferrer güvenlik bayraklarıdır.

1) Window ile en sık kullanılan alanlar

Özellik / Metot Açıklama Örnek
window.innerWidth / innerHeight Görüntü alanı (viewport) genişlik/yüksekliği window.innerWidth
window.outerWidth / outerHeight Tarayıcı penceresinin dış ölçüsü (chrome dahil) window.outerHeight
window.scrollX / scrollY Kaydırma konumu window.scrollY
window.location URL bilgisi ve yönlendirme location.href
window.history İleri/geri gezinme history.back()
window.navigator Tarayıcı/cihaz bilgileri navigator.userAgent
window.screen Ekran çözünürlüğü bilgileri screen.width
alert / confirm / prompt Basit diyaloglar confirm("Emin misin?")
setTimeout / setInterval Zamanlayıcılar setTimeout(fn, 1000)
open / close Yeni pencere/sekme açma-kapama window.open(url)

2) window.open() ile yeni pencere/sekme açma

window.open(url, target, features) ile yeni bir pencere/sekme açılır. Modern tarayıcılar pop-up engelleyici nedeniyle bu işlemi genellikle sadece kullanıcı etkileşimi (tıklama gibi) sırasında izin verir.


// Güvenli kullanım örneği:
const win = window.open(
  "https://example.com",
  "_blank",
  "noopener,noreferrer,width=900,height=650,left=80,top=60"
);

// Bazı tarayıcılarda pop-up engellenirse win null dönebilir:
if (!win) {
  alert("Pop-up engellendi. Lütfen tarayıcı ayarlarından izin verin.");
}
İnce İpucu: noopener / noreferrer
Yeni pencere açarken noopener kullanmak güvenlik açısından önemlidir. Aksi halde yeni açılan sayfa window.opener üzerinden sizi manipüle edebilir (reverse tabnabbing). Modern yaklaşım: her zaman noopener (mümkünse noreferrer) ekle.

3) Açılan pencereyi yönetme (yazdırma / kapatma)

Açılan pencereyi kontrol etmek için window.open’dan dönen referans kullanılır. Ancak güvenlik nedeniyle her siteye içerik yazdırmak mümkün olmayabilir (cross-origin).


let popup;

function pencereAc() {
  popup = window.open("", "BenimPencerem", "width=420,height=240,noopener");
  if (!popup) return alert("Pop-up engellendi!");

  // Aynı origin ise yazdırabilirsiniz (boş pencere açtığımız için genelde mümkün)
  popup.document.write("<h3>Merhaba!</h3>");
  popup.document.write("<p>Bu içerik yeni pencerede yazdırıldı.</p>");
}

function pencereKapat() {
  if (popup && !popup.closed) popup.close();
}
Not
Eski örneklerde geçen PencereAc.Close doğru değildir. Doğrusu: popup.close().

4) Tarayıcı / ortam bilgilerini almak (navigator)

Eskiden navigator.appName, appVersion gibi alanlar kullanılırdı. Günümüzde bunlar çoğu tarayıcıda benzer/yanıltıcı olabilir. Aşağıdaki örnek daha pratik ve günceldir.


function ortamBilgisi() {
  let s = "";
  s += "Dil: " + navigator.language + "\\n";
  s += "Platform: " + (navigator.platform || "Bilinmiyor") + "\\n";
  s += "UserAgent: " + navigator.userAgent + "\\n";
  s += "Viewport: " + window.innerWidth + "x" + window.innerHeight + "\\n";
  s += "Screen: " + screen.width + "x" + screen.height + "\\n";

  // Chromium tabanlı tarayıcılarda yeni alan (varsa)
  if (navigator.userAgentData) {
    s += "UAData Mobile: " + navigator.userAgentData.mobile + "\\n";
  }

  alert(s);
}
Püf Nokta
Tarayıcı tespiti (browser sniffing) yerine mümkünse özellik tespiti (feature detection) yap: if ("geolocation" in navigator) { ... } gibi.

5) location ile yönlendirme ve URL parçalama


// Mevcut URL
console.log(location.href);

// Yönlendirme (aynı sekme)
function git() {
  location.href = "https://example.com";
}

// Yenileme
function yenile() {
  location.reload(); // cache davranışı tarayıcıya göre değişebilir
}

// URL parçaları
console.log(location.protocol); // https:
console.log(location.host);     // domain:port
console.log(location.pathname); // /sayfa
console.log(location.search);   // ?a=1&b=2
Modern URLSearchParams
QueryString parçalamak için güncel yöntem: new URLSearchParams(location.search).get("id")

const qs = new URLSearchParams(location.search);
const id = qs.get("id");
const secim = qs.get("secim");
console.log({ id, secim });

6) history ile ileri / geri


function geriGit() {
  history.back();         // bir önceki sayfa
  // history.go(-1);       // aynı iş
}

function ileriGit() {
  history.forward();      // bir sonraki sayfa
  // history.go(1);
}

7) window resize / scroll eventleri

Kullanıcı pencereyi büyütüp küçülttüğünde veya sayfayı kaydırdığında tetiklenir. Performans için “her pikselde” çalışır gibi düşün: basit throttling kullanmak iyi olur.


let t = 0;

window.addEventListener("resize", () => {
  clearTimeout(t);
  t = setTimeout(() => {
    console.log("Yeni viewport:", window.innerWidth, window.innerHeight);
  }, 150);
});

window.addEventListener("scroll", () => {
  // Çok sık tetiklenir, ağır işlem koyma!
  // console.log(window.scrollY);
});
İnce İpucu
Scroll/resize event’lerinde DOM’u sürekli ölçmek (layout thrashing) sayfayı yavaşlatır. Gerekirse requestAnimationFrame veya throttle/debounce kullan.

8) Mini Demo: Sayfada Kullan (Butonlar)


<button id="btnInfo">Ortam Bilgisi</button>
<button id="btnOpen">Yeni Pencere Aç</button>
<button id="btnClose">Pencereyi Kapat</button>

let popup;

document.addEventListener("DOMContentLoaded", () => {
  document.getElementById("btnInfo").addEventListener("click", ortamBilgisi);

  document.getElementById("btnOpen").addEventListener("click", () => {
    popup = window.open("", "DemoPencere", "width=420,height=240,noopener");
    if (!popup) return alert("Pop-up engellendi!");
    popup.document.write("<h3>Demo Pencere</h3><p>İçerik JS ile yazıldı.</p>");
  });

  document.getElementById("btnClose").addEventListener("click", () => {
    if (popup && !popup.closed) popup.close();
  });
});
Özet
Window ile: yeni pencere açma, yönlendirme, ekran ölçüleri, history ve navigator bilgileri gibi web’in temel “tarayıcı” işlemlerini yönetirsin.