Görev Çubuğunda tarayıcı penceresinin yanıp sönmesini sağlayın


106

JavaScript kullanarak bir kullanıcının tarayıcısının görev çubuğunda yanıp sönmesini / yanıp sönmesini / vurgulanmasını nasıl sağlayabilirim? Örneğin, kullanıcının sunucuda yeni mesaj olup olmadığını görmek için her 10 saniyede bir AJAX isteğinde bulunursam, o sırada başka bir uygulama kullanıyor olsa bile kullanıcının bunu hemen bilmesini isterim.

Düzenle: Bu kullanıcılar, yeni bir mesaj geldiğinde dikkatlerinin dağılmasını ister.


7
tuhaf, yahoo mail bunu yapıyor, acaba nasıl
Ayyash

Yanıtlar:


86

bu, görev çubuğu düğmesinin değişen renklerde yanıp sönmesine neden olmaz, ancak başlık, fareyi hareket ettirene kadar yanıp söner. Bu, platformlar arası çalışmalı ve farklı bir sekmede olsa bile.

newExcitingAlerts = (function () {
    var oldTitle = document.title;
    var msg = "New!";
    var timeoutId;
    var blink = function() { document.title = document.title == msg ? ' ' : msg; };
    var clear = function() {
        clearInterval(timeoutId);
        document.title = oldTitle;
        window.onmousemove = null;
        timeoutId = null;
    };
    return function () {
        if (!timeoutId) {
            timeoutId = setInterval(blink, 1000);
            window.onmousemove = clear;
        }
    };
}());

Güncelleme : HTML5 bildirimlerini kullanmak isteyebilirsiniz .


1
Bunu IE 8'de anlatıldığı gibi çalıştıramadım. Sonsuza kadar başlığı yanıp sönmeye devam etti. Onmousemove kullanmak yerine, pencerenin ne zaman odakta olduğunu takip etmek ve onfocus işlevinde yanıp sönmeyi durdurmak için onfocus ve onblur kullanmak zorunda kaldım. Bu yüzden, sayfa yüklendiğinde, bir boolean "odaklanmış" değişkeni değiştiren onfocus ve onblur fonksiyonlarını kaydediyorum. Yanıp sönme başladığında izlemek için başka bir boole var. Odaklanmamışken, eğer yanıp sönme başladıysa onu durdururum.
Peter M

4
Bu, Chrome'da işe yaramıyor gibi görünüyor ... Chrome'un boş dizenin bir şey olduğunu anladığını sanmıyorum. "Boş" mesaj olarak bir tire kullanırsam, iyi çalışıyor.
John Bubriski

1
uyarı birden çok kez tetiklenirse bu birikmiş gibi görünüyor. bu, aralığın daha hızlı ve daha hızlı hale gelmesine neden olur, ardından kaldırdığınızda yalnızca tek bir aralığı kaldırır.
At

2
Windows 7'de, başlığın değiştirilmesi görev çubuğunda yanıp sönmüyor / yanıp sönmüyor
Chand

1
Buna argümanları (mesajı) nasıl aktarırsınız?
shinzou

54

Tarayıcı başlık çubuğunda bildirim mesajlarının yanıp sönmesi amacıyla bir jQuery eklentisi yaptım . Pencere / sekme odaklandığında yanıp sönmenin durması gerekiyorsa, yanıp sönme aralığı, süre gibi farklı seçenekler belirtebilirsiniz. Eklenti Firefox, Chrome, Safari, IE6, IE7 ve IE8'de çalışır.

İşte nasıl kullanılacağına dair bir örnek:

$.titleAlert("New mail!", {
    requireBlur:true,
    stopOnFocus:true,
    interval:600
});

JQuery kullanmıyorsanız, yine de kaynak koduna bakmak isteyebilirsiniz (tüm büyük tarayıcıları tam olarak desteklemek istiyorsanız, başlık yanıp sönerken etrafta çalışmanız gereken birkaç ilginç hata ve uç durum vardır).


6

"Kullanıcı arayüzü" yanıtım şu: Kullanıcılarınızın tarayıcılarının yanıp sönmesini istediğinden emin misiniz , yoksa istediklerinin bu olduğunu mu düşünüyorsunuz ? Yazılımınızı kullanan kişi ben olsaydım, bu uyarılar çok sık meydana gelirse ve yoluma çıkarsa sinirleneceğimi biliyorum.

Bu şekilde yapmak istediğinizden eminseniz, bir javascript uyarı kutusu kullanın. Google Takvim'in etkinlik hatırlatıcıları için yaptığı budur ve muhtemelen bunun üzerine biraz düşündüler.

Bir web sayfası, bilinmesi gereken uyarılar için gerçekten en iyi ortam değildir. "ZOMG, sunucular çöktü!" Doğru kişilere gönderilen uyarılar, otomatik e-postalar veya SMS mesajları işe yarayabilir.


11
Bu soruya bir cevap vermiyor. Bir yazarı eleştirmek veya açıklama istemek için yazının altına bir yorum bırakın.
secretformula

2
@secretformula 5 yıllık gönderileri kazıp düşük kaliteli olarak işaretlemek gerçekten gerekli mi?
Taifun

2
@Taifun VLQF kuyruğunda geldi yani evet öyle. Meta da bunu tartıştı
secretformula

@ secretformula, bu aslında soruya çok iyi bir cevap veriyor: JavaScript kullanın alert.
Sam

yanlış ya da değil, bu bana bir cevap gibi görünmüyor, ancak tarih gösteriyor ki 2 moderatör NAA bayrağını zaten reddetti, bu yüzden burada fikir birliğini takip ediyorum.
Jean-François Fabre

6

Sözde bunu windows için homurtu javascript API ile pencerelerde yapabilirsiniz:

http://ajaxian.com/archives/growls-for-windows-and-a-web-notification-api

Kullanıcılarınızın homurtu yüklemesi gerekecek.

Sonunda bu, NotificationAPI biçiminde google gears'ın bir parçası olacak:

http://code.google.com/p/gears/wiki/NotificationAPI

Bu nedenle şimdilik homurtu yaklaşımını kullanmanızı, mümkünse pencere başlık güncellemelerine geri dönmenizi ve en sonunda kullanılabilir olduğunda Gears Bildirim API'sini kullanma girişimlerinde mühendislik yapmayı öneriyorum.


5
                var oldTitle = document.title;
                var msg = "New Popup!";
                var timeoutId = false;

                var blink = function() {
                    document.title = document.title == msg ? oldTitle : msg;//Modify Title in case a popup

                    if(document.hasFocus())//Stop blinking and restore the Application Title
                    {
                        document.title = oldTitle;
                        clearInterval(timeoutId);
                    }                       
                };

                if (!timeoutId) {
                    timeoutId = setInterval(blink, 500);//Initiate the Blink Call
                };//Blink logic 

3

Bunu yapmayı düşünebilmemin tek yolu, mesaj alındığında uyarı ('yeni bir mesajınız var') gibi bir şey yapmaktır. Pencere simge durumuna küçültülmüşse bu, görev çubuğunu yanıp söner, ancak istemeyebileceğiniz bir iletişim kutusu da açar.


1
Mevcut tarayıcılarda tutarsız - her biri farklı davranıyor ve hiçbiri görev çubuğu simgesini yanıp sönmüyor (Win8 - IE10, Chrome, Firefox test edildi)
danwellman

3

Neden GMail'in kullandığı yaklaşımı benimsemiyorsunuz ve sayfa başlığında mesaj sayısını göstermiyorsunuz?

Bazen kullanıcılar yeni bir mesaj geldiğinde dikkatlerinin dağılmasını istemezler.


2

Window.focus () 'u denemek isteyebilirsiniz - ancak ekran değişirse can sıkıcı olabilir


1

kullanıcıyı uyarmak için her yeni mesajla web sayfasının başlığını değiştirebilirsiniz. Bunu bir tarayıcı sohbet istemcisi için yaptım ve çoğu kullanıcı bunun yeterince iyi çalıştığını düşündü.

document.title = "[user] hello world";

1

AFAIK, bunu tutarlı bir şekilde yapmanın iyi bir yolu yok. Yalnızca IE web tabanlı bir IM istemcisi yazıyordum. Çoğu zaman işe yarayan window.focus () kullandık. Bazen pencerenin ön plan uygulamasından odağı çalmasına neden olur ki bu gerçekten can sıkıcı olabilir.


0

Bu kullanıcılar, yeni bir mesaj geldiğinde dikkatlerinin dağılmasını ister.

Şirket içi bir proje için bir uygulama yazıyormuşsunuz gibi görünüyor.

Net'te bir bildirim simgesi ekleyen ve ardından yeni mesajlar aldıklarında süslü pop-up'lar veya balon açılır pencereleri veya her neyse, küçük bir pencere uygulaması yazmayı araştırmak isteyebilirsiniz.

Bu çok zor değil ve eminim SO 'bir tepsi simgesini nasıl gösteririm' ve 'bildirimleri nasıl açarım' diye sorarsanız, bazı harika yanıtlar alırsınız :-)

Kayıt için, oldukça eminim ki (bir uyarı / bilgi istemi iletişim kutusu kullanmak dışında) görev çubuğunu JS'de flaş edemezsiniz, çünkü bu büyük ölçüde pencerelere özgüdür ve JS gerçekten böyle çalışmaz. Bazı IE'ye özgü Windows activex kontrollerini kullanabilirsiniz, ancak daha sonra zayıf kullanıcılarınıza IE uygulayabilirsiniz. Bunu yapma :-(


0
function blinkTab() {
        const browserTitle = document.title;
        let timeoutId;
        let message = 'My New Title';

        const stopBlinking = () => {
            document.title = browserTitle;
            clearInterval(timeoutId);
        };

        const startBlinking = () => {
            document.title = document.title  === message ? browserTitle : message;
        };

        function registerEvents() {
            window.addEventListener("focus", function(event) { 
                stopBlinking();
            });

            window.addEventListener("blur", function(event) {
                const timeoutId = setInterval(startBlinking, 500);
            });
        };

        registerEvents();
    };


    blinkTab();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.