Shows an indicator at bottom right/left when there is one or more background network requests in progress.
当前为
// ==UserScript==
// @name Background Network Requests Indicator
// @namespace BackgroundNetworkRequestsIndicator
// @description Shows an indicator at bottom right/left when there is one or more background network requests in progress.
// @version 1.0.1
// @author jcunews
// @include *://*/*
// @grant none
// @run-at document-start
// ==/UserScript==
(function() {
var ele = document.createElement("SCRIPT");
ele.text = "(" + (function() {
var xhrCount = 0, xhrSend = XMLHttpRequest.prototype.send;
var eleStyle = "\
display:block!important; opacity:1!important; visibility:visible!important; \
position:fixed!important; z-index:9999999999!important; left:auto!important; \
top:auto!important; right:0!important; bottom:0!important; float:none!important; \
margin:0!important; box-sizing:content-box!important; border:4px solid #bb0!important; \
border-radius:12px!important; padding:0!important; min-width:16px!important; \
background:#ff0!important; text-align:center!important; \
font:12px/16px sans-serif!important";
var ele = document.createElement("DIV");
ele.style.cssText = eleStyle;
function checkCursor(ev) {
if (ev.clientX >= Math.floor(innerWidth / 2)) {
ele.style.cssText = eleStyle.replace(/left:auto/, "left:0").replace(/right:0/, "right:auto");
} else ele.style.cssText = eleStyle;
}
ele.onclick = function(){
ele.style.cssText = eleStyle.replace(/left:auto/, "left:0").replace(/right:0/, "right:auto");
};
function xhrDone() {
if (--xhrCount < 0) xhrCount = 0;
if (xhrCount) {
ele.textContent = xhrCount;
} else {
removeEventListener("mousemove", checkCursor);
document.body.removeChild(ele);
}
}
XMLHttpRequest.prototype.send = function() {
if (!this.indicator) {
this.addEventListener("error", xhrDone);
this.addEventListener("load", xhrDone);
this.indicator = true;
}
ele.textContent = ++xhrCount;
if (!ele.parentNode) {
document.body.appendChild(ele);
addEventListener("mousemove", checkCursor);
}
return xhrSend.apply(this, arguments);
};
}).toString() + ")()";
document.head.appendChild(ele);
})();