SORU
4 Kasım 2013, PAZARTESİ


pencere.yakın ve öz.yakın Chrome) pencereyi kapatmayın

Sorunu ben window.close() self.close() çağırdığınızda pencereyi kapatmak değil. Şimdi Chrome komut dosyası komut dosyası tarafından oluşturulan herhangi bir pencereyi kapatabilirsiniz bir inanç var gibi görünüyor. Bu açıkça yanlış olduğunu ama ne olursa olsun eğer onaylamak için bir uyarı pop up gerektiriyorsa bile yine de yapmanız gerekiyor. Bu bir türlü gerçekleşmiyor.

Bu yüzden herkes gerçek, işlevsel ve kanıtlanmış yöntem kapanış penceresini kullanarak gibi bir şey javascript:window.close() javascript:self.close() aslında ne beklenir, ve bir şey olmuyor gayet iyi her tarayıcı DEĞİL Krom tabanlı mı? Herhangi bir öneri büyük mutluluk duyacağız ve Javascript özel çözüm, hiçbir şey bir WordPress kullanmak veya üçüncü taraf uygulaması arıyorum.

CEVAP
4 Kasım 2013, PAZARTESİ


Sıradan javascript pencereleri kapat dağınık olamaz. Bu güvenlik özelliği, bir süre önce tanıttı, çeşitli kötü niyetli patlatır ve can sıkma durdurmak.

the latest working spec for window.close():

Pencere nesneleri close() yöntem ise, aşağıdaki koşulların tümü yerine getirilirse, tarama kapsamında kapatmalısınızBir:

  • İlgili tarama kapsamındaBirscript-sıkıca kapatılabilir.
  • Görevdeki yazısının tarama kapsamında tarama içeriği ile tanıdıkBir.
  • Görevdeki yazısının tarama kapsamında tarama kapsamında gezinmek için izin verilirBir.

Tarama bir bağlamscript-sıkıca kapatılabilireğer yardımcı gezen bir topluluk isebir komut tarafından oluşturulankullanıcı eylemi tarafından aksine) eğer tek bir Belge içeren bir tarama kapsamında ise, ya da.

Bu, küçük bir istisna ilejavascript aynı javascript tarafından açılmış bir pencereyi kapatmak için izin verilmemelidir.

Krom userscripts ancak Firefox -- bu geçerli değil ki istisna değil sağlar. The Firefox implementation flat out states:

Bu yöntem, yalnızca bir komut dosyası window.open yöntemini kullanarak açılan pencereler için çağrılacak izin verilir.


Eğer Greasemonkey / Tampermonkey / userscript window.close kullanmaya çalışırsanız alırsınız:
Firefox:Hata iletisi, "Scripts may not close windows that were not opened by script."
Krom:sadece sessizce başarısız olur.



Uzun vadeli çözüm:

Bununla başa çıkmanın en iyi yolubir Chrome uzantısı ve/veya Firefox eklentisi yerine.Bu güvenilir, Geçerli pencereyi kapatabilirsiniz.

Ancak, bu yana güvenlik riskleri, poz verdi window.close, çok az bir Greasemonkey/Tampermonkey senaryo; Greasemonkey ve Tampermonkey diye makul sağlamak, bu işlevselliği kendi API (aslında ambalaj uzantısı için).
Özellik isteği yapmayı düşünün.



Hacky geçici çözümler:

Kromşu andayeniden yönlendirme" istifade eder. "kendini savunmasız oldu Bu kodu genelde iş için kullanılır:

open(location, '_self').close();

Bu hatalı davranış, IMO, ve şimdi (kabaca Nisan 2015) çoğunlukla engellenir. Hala işe yararenjektekodsadecesekmesini taze açılır ve tarama geçmişinde hiçbir sayfa varsa. Sadece şartlar çok küçük bir set içinde yararlı.

Ancakhala Chrome üzerinde çalışır bir varyasyon () v43 & v44 artı Tampermonkey (v3.11 veya üstü). Kullanımı açık @grant window.close() düz. Ö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 için teşekkürler. Bu sadece bir SEKME Açık ise orada çalışmayacağını unutmayın. Sadece ek sekmeleri kapatır.


Firefoxbu karşı güvenli çalışırlar. Yani, sadece javascript yolu, güvenlik ayarlarını, bir defada bir tarayıcı sakat.

about:config açıp ayarlayabilirsiniz
true allow_scripts_to_close_windows.

Eğer senaryon kişisel kullanım için ise, devam edin ve bunu. Eğer başka biri bu ayarı açmak için sorarsanız, haklı, önyargı ile reddetmek akıllıca olacaktır.

Şu anda eşdeğer Krom ayarı yok.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • laptopmag

    laptopmag

    25 Ocak 2008
  • уσ ρℓz sυв ιℓℓ sυв вαcқ

    уσ ρℓz

    14 EKİM 2010
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008