Notifier

1

이 스크립트는 직접 설치하는 용도가 아닙니다. 다른 스크립트에서 메타 지시문 // @require https://update.greasyfork.org/scripts/478724/1289430/Notifier.js을(를) 사용하여 포함하는 라이브러리입니다.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

'use strict';

if (typeof Notification !== "function") throw Error("Not Support yet!");

const notify = (() => {
    const open = (typeof GM_openInTab === "function") ?
          GM_openInTab : (uri) => window.open(uri, "_blank");

    if (typeof GM_notification === "function") {
        const ver = GM_info.version;
        const handler = GM_info.scriptHandler;
        if (handler === "Violentmonkey" && ver >= "2.15.4") {
            const V2_15_4 = (opti) => {
                const noti = GM_notification({
                    onclick: () => (open(opti.url), noti.remove()),
                    ...opti
                });
                return noti;
            };
            if (ver > "2.16.1") // v 2.16.1 has some bugs
                return (opti) => {
                    opti.zombieUrl = opti.url;
                    opti.zombieTimeout = 2147483647;
                    return V2_15_4(opti);
                };
            return V2_15_4;
        } else if (handler === "Tampermonkey" && ver >= "5.0")
            return GM_notification;
    }
    return ({text, title, image, silent, tag, url: uri, ondone}) => {
            Notification.requestPermission();
            const options = {
                body: text,
                silent, tag,
                data: uri,
                icon: image,
            };
            if (!!tag) options.renotify = true;
            const noti = new Notification(title, options);
            noti.onclick = () => (open(noti.data), noti.close());
            noti.onclose = ondone;
            return {remove: () => noti.close()};
        };
})();