消息推送,up评论优化 —— AcFun

awsl!

As of 2019-10-13. See the latest version.

// ==UserScript==
// @name         消息推送,up评论优化 —— AcFun
// @namespace    http://tampermonkey.net/
// @version      2.2
// @description  awsl!
// @author       NineDTNY
// @match        https://*.acfun.cn/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';
    let zxs_namespace = {
        originalXHR: window.XMLHttpRequest,
        myXHR: function() {
            const xhr = new zxs_namespace.originalXHR;
            for (let attr in xhr) {
                if (attr === 'onreadystatechange') {
                    xhr.onreadystatechange = (...args) => {
                        if (this.readyState == 4) {
                            // 请求成功 post同源message事件
                            if(this.responseURL.search(/comment\/list/) != -1){
                                window.postMessage('awsl','/');
                            }else if(this.responseURL.search(/comment\/sublist/) != -1){
                                window.postMessage('awsl','/');
                            }
                        }
                        this.onreadystatechange && this.onreadystatechange.apply(this, args);
                    }
                    continue;
                }
                if (typeof xhr[attr] === 'function') {
                    this[attr] = xhr[attr].bind(xhr);
                } else {
                    Object.defineProperty(this, attr, {
                        get: () => xhr[attr],
                        set: (val) => xhr[attr] = val,
                        enumerable: true
                    });
                }
            }
        },
        ready: function(fn) {
            if(document.addEventListener) {
                document.addEventListener('DOMContentLoaded', function() {
                    fn();
                }, false);
            }else{
                //兼容?不存在的
            }
        }
    }
    window.XMLHttpRequest = zxs_namespace.myXHR;
    zxs_namespace.ready(function(){
        function awsl(){
            /*******************************消息推送************************************/
            var awslFlag = true;
            $('.guide-user').hover(
                function(){
                    let msgcount = $('#user-message-con').attr("data-count");
                    if (msgcount == undefined){
                        //console.log($('.badget'))
                        msgcount = $('.badget')[1].innerText;
                    }
                    //console.log(msgcount);
                    if(awslFlag && msgcount>0){
                        awslFlag = false
                        $.get("https://www.acfun.cn/rest/pc-direct/feed/followFeed?isGroup=0&gid=-1&count="+msgcount+"&pcursor=1",function(data,status){
                            if(status != 'success'){
                                awslFlag = true;
                                console.log('没救了...'+status)
                                return;
                            }
                            if(data.feedList.length == 0){
                                awslFlag = true;
                                console.log('没救了...')
                                console.log(data);
                                return;
                            }
                            $('.guide-item-con')[0].style.width='286px';
                            for(let i=msgcount-1; i>=0;i--){
                                let title = data.feedList[i].title
                                let maxLen = 26;
                                const preHtml = `<li class='awsl' style="display:block;margin-left: 10px;"><img src='${data.feedList[i].titleImg}' style='width: 40px;height: 30px;border-radius: 4px;margin-top: 2px;margin-right: 5px;    display: inline-block;'><a style='color: #08c;line-height: normal;width:217px;display: inline-block;' target='_blank' href='${data.feedList[i].url}' title="${title}">${title.length>maxLen?title.substr(0,maxLen-1)+'...':title} ——${data.feedList[i].author}</a></li>`;
                                $('#user-message').prepend(preHtml);
                            }
                            $('.badget')[1].style.display = 'none';
                            let allmsg = $('.badget')[0].innerText;
                            if(allmsg - msgcount <= 0){
                                $('.badget')[0].style.display = 'none';
                            }else{
                                $('.badget')[0].innerText = allmsg - msgcount;
                            }
                            $('.user-message-count').hide();
                        });
                    }
                },function(){});
            /*************************昵称标记********************************/
            let upname = $('a.upname').html();
            if(typeof upname == 'undefined'){
                upname = $('a.name-wrap').html();
                if(typeof upname == 'undefined'){
                    console.log('no up');
                    return;
                }
            }
            //清除icon再遍历判断添加
            function setUpIcon(){
                $('.mp-up-icon').remove();
                $('a.name').each(function(index,element){
                    if(element.innerText == upname /*|| element.innerText == `@${upname}`*/){
                        $(this).prepend("<span class='mp-up-icon' style='border: 1px solid #2596d2;color: #2596d2;padding: 0px 2px;text-align: center;line-height: normal;margin-right: 3px;border-radius: 3px;font-weight: bold;'>up</span>")
                    }
                });
            }
            //监听xmlhttprequest请求
            window.addEventListener("message", function(event){
                if(event.data == "awsl")
                    setUpIcon();
            },false);
            //等待初次评论加载完成后执行setUpIcon
            const upnameInterval= setInterval(function(){
                let len = $('a.name').length;
                if(len > 0){
                    clearInterval(upnameInterval);
                    setUpIcon();
                }
            },1000);
        }
         /**********************************粗糙的jquery补完计划******************************************/
        if (typeof jQuery == 'undefined'){
            const awslScriptElement=document.createElement('script');
            awslScriptElement.setAttribute("type","text/javascript");
            awslScriptElement.setAttribute("src", 'https://libs.baidu.com/jquery/2.0.0/jquery.min.js');
            document.getElementsByTagName("head")[0].appendChild(awslScriptElement);
            const awslInterval= setInterval(function(){
                if(typeof jQuery == 'function'){
                    clearInterval(awslInterval);
                    awsl();
                }
            },888);
        }else{
            awsl();
        }
    });
})();