煎蛋多说评论框拯救计划

煎蛋多说评论框拯救计划,拯救被“评论框出错啦(990015): 服务异常,请联系客服人员”折磨的你。

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         煎蛋多说评论框拯救计划
// @namespace    http://jandan.net/?JandanTucao
// @version      0.1
// @description  煎蛋多说评论框拯救计划,拯救被“评论框出错啦(990015): 服务异常,请联系客服人员”折磨的你。
// @author       Jandaner
// @match        *://jandan.net/*
// @grant        none
// @github       https://github.com/slowargo/JandanTucao
// ==/UserScript==
(function() {
    var myElement = document.querySelectorAll("span.time");
    for (var i = 0; i < myElement.length; i++) {
        //console.log("i:" + i + " ? " + myElement[i]);
        myElement[i].addEventListener("click", function() {
            function wait_util(fn, condition, interval) {
                interval = interval || 100;
                return function() {
                    var timer = setInterval(function() {
                        var check;
                        try {
                            check = !!(condition());
                        } catch (e) {
                            check = false;
                        }
                        if (check) {
                            clearInterval(timer);
                            delete timer;
                            fn();
                        }
                    }, interval);
                };
            }
            var link = $(this).find('a');
            if (link.length > 0) {
                var comment_id = $(link).find('span.ds-thread-count').attr('data-thread-key');
                var comment_container = $('#comment-box-' + comment_id);
                var sub_div = comment_container.find('div');
                var retry = 3;
                if (sub_div.length == 0) {
                    console.log("div not found");
                    return;
                }
                var res = $(sub_div[0]).html();
                //似乎不保证在<a>的click前执行?为避免错误重置,依然加上<div id="ds-waiting"></div>的判断
                //但假如多说返回超时,这里就不会强制重试了
                if (res.length > 0 && res.length < 30 && res != '<div id="ds-waiting"></div>') {
                    //if ($(sub_div[0]).html() == '评论框出错啦(990015): 服务异常,请联系客服人员' || $(sub_div[0]).html() =='<div id="ds-waiting"></div>' ) {
                    //重置状态,强制多说脚本重新向服务器请求
                    console.log(res + " reset...");
                    $(sub_div[0]).html('');
                    $(sub_div[0]).data("initialized", 0);
                }
                wait_util(function() {}, function() {
                    var res = $(sub_div[0]).html();
                    if (res == '<div id="ds-waiting"></div>') {
                        //如果这里放过了,很可能加载完成后多说返回990015,评论区就直接显示990015了
                        return false;
                    }
                    if (retry-- > 0 && res.length < 30) {
                        console.log(res + " retry: " + retry);
                        //重新加载评论框
                        $(sub_div[0]).html('');
                        $(sub_div[0]).data("initialized", 0);
                        DUOSHUO.EmbedThread(sub_div[0]);
                        return false;
                    }
                    return true;
                }, 200)();
            }
        });
    }
})();