Plug.DJ Chat Notifications

Shows desktop notification for new chat messages.

目前為 2015-05-11 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Plug.DJ Chat Notifications
// @icon         http://i.imgur.com/0LwVHyl.png
// @namespace    x4_plugdjcn
// @version      0.2
// @description  Shows desktop notification for new chat messages.
// @author       x4fab
// @license      CC0
// @match        https://plug.dj/*
// @grant        none
// ==/UserScript==

!function (){
    var windowOpen = window.open,
        opened;
    
    window.open = function (){
        opened = windowOpen.apply(window, arguments);
        return opened;
    };

    if (Notification.permission == 'default'){
        document.body.onclick = function (){
            Notification.requestPermission();
            document.body.onclick = null;
        };
    }

    var lastId;
    setInterval(function (){
        if (opened && opened.closed){
            opened = null;
        }
        
        var node = (opened ? opened.document : document).querySelector('#chat-messages .cm.message:not(.from-you):last-child .msg');
        if (!node){
            return;
        }

        var currentId = node.querySelector('.text').className;
        if (lastId != currentId){
            var focused = opened && opened.document.hasFocus() || document.hasFocus();
            
            if (!focused){
                var notification = new Notification(node.querySelector('.un').textContent, { 
                    body: node.querySelector('.text').innerHTML.replace(/^[\s\S]*<br>/, '').replace(/<.+?>/g, ''), 
                    icon: 'http://i.imgur.com/0LwVHyl.png' 
                });
                
                setTimeout(notification.close.bind(notification), 3e3);
            }
            
            lastId = currentId;
        } 
    }, 50);
}();