Normal javascript willy-nilly pencereleri kapatamaz. Bu, çeşitli kötü niyetli istismarları ve sıkıntıları durdurmak için bir süre önce sunulan bir güvenlik özelliğidir.
Gönderen en son çalışma specwindow.close()
:
close()
Window yöntem gereken nesneleri, aşağıdaki koşulların yerine getirilmesi halinde, yakın tarama bağlam A :
- Karşılık gelen tarama bağlam A bir komut kapatılabilir .
- Görevdeki komut dosyasının tarama içeriği, tarama içeriği A'ya aşinadır .
- Görevdeki komut dosyasının gözatma içeriğinin, gözatma içeriğinde A gezinmesine izin verilir .
Tarama içeriği, bir komut dosyasının (kullanıcının eyleminin aksine) oluşturduğu yardımcı bir tarama bağlamıysa veya oturum geçmişi yalnızca bir Belge içeren bir tarama bağlamıysa komut dosyasına kapatılabilir .
Bu, küçük bir istisna dışında, javascript'in aynı javascript tarafından açılmayan bir pencereyi kapatmasına izin verilmemesi gerektiği anlamına gelir .
Chrome, kullanıcı komut dosyalarına uygulanmadığı istisnalara izin verir, ancak Firefox buna izin vermez. Firefox uygulamasının durumu şöyle :
Bu yöntemin yalnızca bir komut dosyası tarafından window.open
yöntem kullanılarak açılan pencereler için çağrılmasına izin verilir .
Eğer kullanmayı denerseniz window.close
: Eğer alacak userscript / Greasemonkey / Tampermonkey dan
Firefox'u: hata mesajı, " Scripts may not close windows that were not opened by script.
"
Chrome: sessizce başarısız sadece.
Uzun vadeli çözüm:
Bununla başa çıkmanın en iyi yolu , bunun yerine bir Chrome uzantısı ve / veya Firefox eklentisi yapmaktır. Bunlar geçerli pencereyi güvenilir bir şekilde kapatabilir.
Bununla birlikte, güvenlik riskleri window.close
bir Greasemonkey / Tampermonkey betiği için çok daha az olduğu için; Greasemonkey ve Tampermonkey bu işlevselliği API'larında makul bir şekilde sağlayabilir (esas olarak uzantı çalışmasını sizin için paketler).
Bir özellik isteği yapmayı düşünün.
Keskin geçici çözümler:
Chrome şu anda "kendi kendine yönlendirme" istismarına karşı savunmasızdı. Yani genel olarak işe yarayan bunun gibi kod:
open(location, '_self').close();
Bu hatalı davranış, IMO ve şimdi (kabaca Nisan 2015 itibariyle) çoğunlukla engellendi. Yalnızca sekme yeni açılmışsa ve tarama geçmişinde hiç sayfa yoksa, eklenen koddan çalışmaya devam eder. Bu nedenle, yalnızca çok küçük koşullarda kullanılabilir.
Bununla birlikte, Chrome (v43 ve v44) artı Tampermonkey'de (v3.11 veya üstü) bir varyasyon hala çalışıyor . Açık @grant
ve sade bir yöntem kullanın window.close()
. ÖRNEĞİN:
// ==UserScript==
// @name window.close demo
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant GM_addStyle
// ==/UserScript==
setTimeout (window.close, 5000);
Güncelleme için zanetu'ya teşekkürler . Açıkta yalnızca bir sekme varsa bunun işe yaramayacağını unutmayın. Yalnızca ek sekmeleri kapatır.
Firefox bu sömürüye karşı güvenlidir. Bu nedenle, tek javascript yolu güvenlik ayarlarını, her seferinde bir tarayıcıyı saklamaktır.
Sen açabilir about:config
ve set
allow_scripts_to_close_windows
için true
.
Senaryonuz kişisel kullanım içinse, devam edin ve yapın. Başka birinden bu ayarı açmasını isterseniz, önyargıyla reddetmek akıllı ve haklı olur.
Şu anda Chrome için eşdeğer bir ayar yok.
window.close()
krom benim için çalışıyor.