2008-08-31 37 views
97

Làm cách nào để làm cho trình duyệt của người dùng nhấp nháy/flash/đánh dấu trong thanh tác vụ bằng JavaScript? Ví dụ: nếu tôi thực hiện yêu cầu AJAX cứ 10 giây một lần để xem liệu người dùng có bất kỳ tin nhắn mới nào trên máy chủ hay không, tôi muốn người dùng biết ngay thông báo đó ngay cả khi anh ấy đang sử dụng một ứng dụng khác vào thời điểm đó.Làm cho cửa sổ trình duyệt nhấp nháy trong thanh tác vụ

Chỉnh sửa: Những người dùng này muốn bị phân tâm khi có thư mới.

+6

lạ, yahoo mail hiện nó, tôi tự hỏi có bao tho – Ayyash

Trả lời

79

này sẽ không làm cho các nút trên thanh tác vụ đèn flash trong việc thay đổi màu sắc, nhưng danh hiệu sẽ nhấp nháy và tắt cho đến khi chúng di chuyển chuột.Điều này sẽ làm việc trên nền tảng, và thậm chí nếu họ chỉ có nó trong một tab khác nhau.

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

Cập nhật: Bạn có thể muốn xem xét sử dụng HTML5 notifications.

+1

Tôi không thể làm việc này như được mô tả trong IE 8. Nó liên tục nhấp nháy tiêu đề. Thay vì sử dụng onmousemove, tôi đã phải sử dụng onfocus và onblur để theo dõi thời điểm cửa sổ được lấy nét hay không và dừng nhấp nháy trong chức năng onfocus. Vì vậy, khi tải trang, tôi đăng ký các chức năng onfocus và onblur để chuyển đổi biến "tập trung" boolean. Tôi có một boolean khác để theo dõi khi nhấp nháy đã bắt đầu. Trong onfocus, nếu nhấp nháy đã bắt đầu, tôi dừng nó lại. –

+0

window.onmousemove sẽ không hoạt động trong IE, tuy nhiên document.onmousemove không hoạt động.Sử dụng onblur và onfocus hoạt động khá tốt, nhưng có một lỗi lạ trong Chrome khi thiết lập document.title trong một trình xử lý sự kiện onfocus. Xem bài đăng trên blog của tôi về nó nếu bạn muốn: http://heyman.info/2010/oct/7/google-chrome-bug-when-setting-document-title/ – heyman

+4

Điều này dường như không hoạt động trong Chrome .. Tôi không nghĩ Chrome hiểu rằng chuỗi rỗng là gì cả. Nếu tôi sử dụng dấu gạch ngang làm thông báo "trống", nó hoạt động tốt. –

3

Cách duy nhất tôi có thể nghĩ là làm điều này là bằng cách thực hiện một cái gì đó như cảnh báo ('bạn có một tin nhắn mới') khi nhận được tin nhắn. Điều này sẽ flash thanh tác vụ nếu cửa sổ được thu nhỏ, nhưng nó cũng sẽ mở một hộp thoại mà bạn có thể không muốn.

+1

không nhất quán trên các trình duyệt hiện nay - từng cư xử khác nhau và không làm cho đèn flash icon trên thanh tác vụ (thử nghiệm Win8 - IE10, Chrome, Firefox) – danwellman

3

Tại sao không sử dụng cách tiếp cận mà GMail sử dụng và hiển thị số lượng thư trong tiêu đề trang?

Đôi khi người dùng không muốn bị phân tâm khi có tin nhắn mới.

0

Những người dùng này muốn bị phân tâm khi có thư mới.

Có vẻ như bạn đang viết ứng dụng cho dự án công ty nội bộ.

Bạn có thể muốn điều tra viết một ứng dụng cửa sổ nhỏ trong .net, thêm biểu tượng thông báo và sau đó có thể làm cửa sổ bật lên hoặc cửa sổ bật lên ưa thích hoặc bất cứ điều gì, khi nhận được tin nhắn mới.

Đây không phải là quá khó và tôi chắc chắn nếu bạn hỏi SO 'làm cách nào để hiển thị biểu tượng khay' và 'làm cách nào để bật thông báo', bạn sẽ nhận được một số câu trả lời tuyệt vời :-)

Để ghi lại, tôi khá chắc chắn rằng (ngoài việc sử dụng hộp thoại cảnh báo/nhắc), bạn không thể flash thanh tác vụ trong JS, vì đây là cửa sổ đặc biệt và JS thực sự không hoạt động như thế. Bạn có thể sử dụng một số cửa sổ trình duyệt IE cụ thể activex điều khiển, nhưng sau đó bạn gây ra IE khi người dùng nghèo của bạn. Đừng làm điều đó :-(

1

bạn có thể thay đổi tiêu đề của trang web với mỗi tin nhắn mới để cảnh báo người sử dụng. Tôi đã làm điều này cho một khách hàng trình duyệt chat và hầu hết người dùng nghĩ rằng nó làm việc tốt đủ.

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

của tôi "giao diện người dùng" phản ứng là: bạn có chắc chắn người dùng của bạn muốn trình duyệt của họ nhấp nháy, hoặc làm bạn nghĩ đó là những gì họ muốn Nếu tôi là một trong những sử dụng phần mềm của bạn, tôi biết tôi muốn được? khó chịu nếu những cảnh báo này xảy ra rất thường xuyên và cản đường tôi.

I Bạn chắc chắn bạn muốn thực hiện theo cách này, sử dụng hộp cảnh báo javascript. Đó là những gì Lịch Google làm cho lời nhắc sự kiện và họ có thể đã suy nghĩ một chút về điều đó.

Trang web thực sự không phải là phương tiện tốt nhất cho các cảnh báo cần biết. Nếu bạn đang thiết kế một cái gì đó dọc theo dòng của "ZOMG, các máy chủ đang xuống!" cảnh báo, email tự động hoặc tin nhắn SMS đến đúng người có thể thực hiện thủ thuật.

+9

này không cung cấp một câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. – secretformula

+0

@secretformula có thực sự cần thiết để khai thác các bài đăng cũ 5 năm và gắn cờ chúng với chất lượng thấp không? – Taifun

+2

@Taifun nó xuất hiện trong hàng đợi VLQF để có nó. Meta đã thảo luận về điều này quá – secretformula

2

Bạn có thể muốn thử window.focus() - nhưng nó có thể gây phiền nhiễu nếu màn hình chuyển xung quanh

+1

Nó không hoạt động khi chúng tôi có các tab – Shashwat

6

Giả sử là bạn có thể làm điều này trên cửa sổ với tiếng gầm cho các cửa sổ javascript API:

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

Người dùng của bạn sẽ phải cài đặt tiếng gầm vang lên mặc dù.

Cuối cùng điều này sẽ là một phần của bánh răng google, dưới hình thức của NotificationAPI:

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

Vì vậy, tôi sẽ khuyên bạn sử dụng cách tiếp cận tiếng gầm cho bây giờ, té ngửa ra bản cập nhật tiêu đề cửa sổ nếu có thể và đã kỹ thuật trong nỗ lực sử dụng API thông báo Gears, khi nó trở nên khả dụng.

1

AFAIK, không có cách nào tốt để làm điều này với tính nhất quán. Tôi đã viết một ứng dụng IM trên nền web chỉ dựa trên IE. Chúng tôi đã kết thúc bằng cách sử dụng window.focus(), hoạt động hầu hết thời gian. Đôi khi nó thực sự sẽ làm cho cửa sổ lấy cắp tiêu điểm từ ứng dụng nền trước, điều này có thể thực sự gây phiền nhiễu.

53

Tôi đã thực hiện một jQuery plugin với mục đích nhấp nháy thông báo thông báo trong thanh tiêu đề của trình duyệt. Bạn có thể chỉ định các tùy chọn khác nhau như khoảng thời gian nhấp nháy, thời lượng, nếu nhấp nháy sẽ dừng khi cửa sổ/tab được lấy nét, v.v. Plugin hoạt động trong Firefox, Chrome, Safari, IE6, IE7 và IE8.

Dưới đây là một ví dụ về cách sử dụng nó:

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

Nếu bạn không sử dụng jQuery, bạn vẫn có thể muốn nhìn vào source code (có một vài lỗi kỳ quặc và các trường hợp cạnh mà bạn cần phải làm việc xung quanh khi làm tiêu đề nhấp nháy nếu bạn muốn hỗ trợ đầy đủ tất cả các trình duyệt chính).

+4

Công việc tuyệt vời! Tuyệt vời như thế nào dễ sử dụng này –

2
   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 
Các vấn đề liên quan