Membuat jendela browser berkedip di bilah tugas

105

Bagaimana cara membuat browser pengguna berkedip / flash / sorot di bilah tugas menggunakan JavaScript? Misalnya, jika saya membuat permintaan AJAX setiap 10 detik untuk melihat apakah pengguna memiliki pesan baru di server, saya ingin pengguna segera mengetahuinya, bahkan jika dia menggunakan aplikasi lain pada saat itu.

Sunting: Para pengguna ini ingin diganggu saat pesan baru tiba.

erik
sumber
7
aneh, yahoo mail melakukannya, saya bertanya-tanya bagaimana
Ayyash

Jawaban:

86

ini tidak akan membuat tombol taskbar berkedip dalam warna yang berubah, tetapi judul akan berkedip dan mati sampai mereka menggerakkan mouse. Ini harus berfungsi lintas platform, dan bahkan jika mereka hanya memilikinya di tab yang berbeda.

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;
        }
    };
}());

Pembaruan : Anda mungkin ingin melihat menggunakan notifikasi HTML5 .

nickf
sumber
1
Saya tidak bisa mendapatkan ini untuk bekerja seperti yang dijelaskan di IE 8. Judul terus berkedip selamanya. Alih-alih menggunakan onmousemove, saya harus menggunakan onfocus dan onblur untuk melacak kapan jendela berada dalam fokus atau tidak dan menghentikan kedipan dalam fungsi onfocus. Jadi ketika halaman dimuat, saya mendaftarkan fungsi onfocus dan onblur yang mengubah variabel "terfokus" boolean. Saya memiliki boolean lain untuk dilacak saat kedipan sudah dimulai. Dalam fokus, jika kedipan sudah dimulai, saya hentikan.
Peter M
4
Sepertinya ini tidak berfungsi di Chrome ... Saya rasa Chrome tidak memahami bahwa string kosong adalah apa saja. Jika saya menggunakan tanda hubung sebagai pesan "kosong", ini berfungsi dengan baik.
John Bubriski
1
ini tampaknya menumpuk jika peringatan dipicu beberapa kali. ini menghasilkan interval semakin cepat dan lebih cepat, lalu ketika Anda menghapus, itu hanya menghapus satu interval.
Kuda
2
Di Windows 7, mengubah judul tidak berkedip / berkedip di bilah tugas
Chand
1
Bagaimana Anda menyampaikan argumen (pesan) untuk ini?
shinzou
54

Saya telah membuat plugin jQuery untuk tujuan mengedipkan pesan notifikasi di bilah judul browser. Anda dapat menentukan opsi yang berbeda seperti interval kedipan, durasi, jika kedipan harus berhenti ketika jendela / tab menjadi fokus, dll. Plugin bekerja di Firefox, Chrome, Safari, IE6, IE7 dan IE8.

Berikut ini contoh cara menggunakannya:

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

Jika Anda tidak menggunakan jQuery, Anda mungkin masih ingin melihat kode sumbernya (ada beberapa bug unik dan kasus edge yang perlu Anda atasi saat melakukan title blinking jika Anda ingin mendukung sepenuhnya semua browser utama).

Hei bro
sumber
6

Respons "antarmuka pengguna" saya adalah: Apakah Anda yakin pengguna ingin browser mereka berkedip, atau menurut Anda itu yang mereka inginkan? Jika saya adalah orang yang menggunakan perangkat lunak Anda, saya tahu saya akan terganggu jika peringatan ini sangat sering terjadi dan menghalangi saya.

Jika Anda yakin ingin melakukannya dengan cara ini, gunakan kotak peringatan javascript. Itulah yang dilakukan Google Kalender untuk pengingat acara, dan mereka mungkin memikirkannya.

Halaman web bukanlah media terbaik untuk peringatan yang perlu diketahui. Jika Anda mendesain sesuatu seperti "ZOMG, server sedang down!" peringatan, email otomatis, atau pesan SMS ke orang yang tepat mungkin bisa membantu.

Rudi
sumber
11
Ini tidak memberikan jawaban atas pertanyaan tersebut. Untuk mengkritik atau meminta klarifikasi dari seorang penulis, tinggalkan komentar di bawah postingannya.
secretformula
2
@secretformula apakah benar-benar perlu menggali postingan berusia 5 tahun dan menandainya sebagai berkualitas rendah?
Taifun
2
@Taifun itu muncul di antrian VLQF jadi ya itu. Meta telah membahas ini juga
secretformula
@secretformula, ini sebenarnya memberikan jawaban yang sangat bagus untuk pertanyaan: gunakan JavaScript alert.
Sam
salah atau tidak, ini sepertinya bukan jawaban bagi saya, tetapi riwayat menunjukkan bahwa 2 moderator telah menolak bendera NAA, jadi saya mengikuti konsensus di sini.
Jean-François Fabre
6

Seharusnya Anda dapat melakukan ini di windows dengan growl for windows javascript API:

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

Pengguna Anda harus menginstal growl.

Akhirnya ini akan menjadi bagian dari Google Gears, dalam bentuk NotificationAPI:

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

Jadi saya akan merekomendasikan menggunakan pendekatan growl untuk saat ini, kembali ke update judul jendela jika memungkinkan, dan sudah melakukan rekayasa dalam upaya menggunakan Gears Notification API, untuk saat itu akhirnya tersedia.

Joeri Sebrechts
sumber
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 
Rikki Goswami
sumber
3

Satu-satunya cara yang dapat saya pikirkan untuk melakukan ini adalah dengan melakukan sesuatu seperti alert ('you have a new message') saat pesan diterima. Ini akan mem-flash bilah tugas jika jendela diminimalkan, tetapi juga akan membuka kotak dialog, yang mungkin tidak Anda inginkan.

Robin Barnes
sumber
1
Tidak konsisten di semua browser saat ini - masing-masing berperilaku berbeda dan tidak ada yang membuat ikon bilah tugas berkedip (diuji Win8 - IE10, Chrome, Firefox)
danwellman
3

Mengapa tidak mengambil pendekatan yang digunakan GMail dan menunjukkan jumlah pesan di judul halaman?

Terkadang pengguna tidak ingin terganggu saat pesan baru tiba.

andyuk
sumber
2

Anda mungkin ingin mencoba window.focus () - tetapi mungkin mengganggu jika layar beralih

Sugendran
sumber
1

Anda dapat mengubah judul halaman web dengan setiap pesan baru untuk mengingatkan pengguna. Saya melakukan ini untuk klien obrolan browser dan sebagian besar pengguna mengira itu berfungsi cukup baik.

document.title = "[user] hello world";
Toran Billups
sumber
1

AFAIK, tidak ada cara yang baik untuk melakukan ini dengan konsisten. Saya sedang menulis klien IM berbasis web hanya untuk IE. Kami akhirnya menggunakan window.focus (), yang berfungsi sebagian besar waktu. Terkadang itu benar-benar akan menyebabkan jendela mencuri fokus dari aplikasi latar depan, yang bisa sangat mengganggu.

Chase Seibert
sumber
0

Para pengguna ini ingin diganggu saat pesan baru tiba.

Sepertinya Anda sedang menulis aplikasi untuk proyek internal perusahaan.

Anda mungkin ingin menyelidiki penulisan aplikasi windows kecil di .net yang menambahkan ikon beri tahu dan kemudian dapat melakukan sembulan mewah atau sembulan balon atau apa pun, ketika mereka mendapat pesan baru.

Ini tidak terlalu sulit dan saya yakin jika Anda bertanya kepada SO 'bagaimana cara menampilkan ikon baki' dan 'bagaimana cara saya melakukan pemberitahuan sembulan' Anda akan mendapatkan jawaban yang bagus :-)

Sebagai catatan, saya cukup yakin bahwa (selain menggunakan kotak dialog peringatan / prompt) Anda tidak dapat mem-flash bilah tugas di JS, karena ini sangat spesifik untuk jendela, dan JS benar-benar tidak berfungsi seperti itu. Anda mungkin dapat menggunakan beberapa kontrol activex windows khusus IE, tetapi kemudian Anda memberikan IE pada pengguna yang buruk. Jangan lakukan itu :-(

Orion Edwards
sumber
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();
prashantsahni
sumber