煎蛋多说评论框拯救计划,拯救被“评论框出错啦(990015): 服务异常,请联系客服人员”折磨的你。
// ==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)();
}
});
}
})();