// ==UserScript==
// @name check the links is visitable or not
// @author burningall
// @description 检查超链接是否有效
// @version 2015.8.22
// @include *
// @grant GM_registerMenuCommand
// @grant GM_xmlhttpRequest
// @run-at document-start
// @compatible chrome 推荐
// @compatible firefox 不推荐
// @license The MIT License (MIT); http://opensource.org/licenses/MIT
// @supportURL http://www.burningall.com
// @contributionURL troy450409405@gmail.com|alipay.com
// @namespace https://greasyfork.org/zh-CN/users/3400-axetroy
// @downloadURL none
// ==/UserScript==
(function(document){
var config = {
"autoLoad":true,//脚本开始加载,是否自动ajax。(不建议为true,大量ajax会影响性能,甚至假死)
"rules": /[a-zA-z]+:\/\/[^\s]*/img
};
function Ob(target,config,fn){
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
var observer = new MutationObserver(function(mutations){
mutations.forEach(function(mutation) {
fn.call(target);
});
});
observer.observe(target, config);
}
function addEvent(obj, type, fn){
return obj.addEventListener ?
obj.addEventListener(type, function(e){
var ev = window.event ? window.event : (e ? e : null);
if( fn.call(obj,ev)===false ){
e.cancelBubble = true;//阻止冒泡
e.preventDefault();//chrome,firefox下阻止默认事件
}
}, false)
:
obj.attachEvent('on' + type, function(e){
ev.target = ev.target || ev.srcElement;
if(fn.call(obj,ev)===false ){
e.cancelBubble = true;//阻止冒泡
return false;//阻止默认事件,针对IE8
}
});
}
function visible(obj) {
var pos = obj.getBoundingClientRect();
if (document.documentElement.getBoundingClientRect) {
var w = document.documentElement.clientWidth;
var h = document.documentElement.clientHeight;
var jugg = pos.top > h || pos.bottom < 0 || pos.left > w || pos.right < 0;
if (jugg === true) {
//不可视
return false;
} else {
//可视
return true;
}
}
}
function check(urlLink,a,secFn,failFn){
a.setAttribute("checking",true);
GM_xmlhttpRequest({
method: "GET",
url: urlLink,
onerror: function(response ){
failFn(a);
},
onreadystatechange:function(response){
if(response.readyState==4){
var status = response.status+'';
if( status.charAt(0)=="4" || status.charAt(0)=="5" ){//4XX,5XX错误
failFn(a);
}else{
secFn(a);
}
}
}
});
}
function init(){
/**
* 不考虑:
* ||
*
*/
var link = document.querySelectorAll('a[href]:not([href^="javascript"]):not([href$="#"]):not([checking]):not([visited])');
var inViewPort = [];
var a;
for(var i=0;i300 ){
return;
}
for( var j=0;j