[已弃用] CKAutoLoader用于在哔哩哔哩播放器页面延后加载脚本,参考了Pakku弹幕插件的加载方式。
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/405344/816331/CKAutoLoader.js
// ==UserScript==
// @name CKAutoLoader
// @namespace blbljsloader.ckylin.site
// @version 0.1
// @author CKylinMC
// @grant unsafeWindow
// @license GPLv3 License
// ==/UserScript==
if(!window.CKAutoLoader){
window.CKAutoLoader = {
loaded: false,
loader_Started: false,
cblist:{},
retry_count: 50,
reg: function(name,callback){
if(window.CKAutoLoader.loaded){
if(callback instanceof Function){
callback();
}
return;
}
if(!window.CKAutoLoader.loader_Started){
window.CKAutoLoader.loader();
}
window.CKAutoLoader.cblist[name] = callback;
},
canInject: function(){
//参考pakku的检测加载机制
var blplayer = document.querySelector("div.bilibili-player");
if (blplayer && !blplayer.querySelector(".bilibili-player-auxiliary-area")) {
blplayer = blplayer.closest("body");
}
if (blplayer) {
var list_elem = blplayer.querySelector(".bilibili-player-danmaku, .player-auxiliary-danmaku-wrap")
}
if (!blplayer || !list_elem) {
return false;
}
return true;
},
loader: function(){
window.CKAutoLoader.loader_Started = true;
console.log("CKAutoLoader: try inject...");
if(!window.CKAutoLoader.canInject()){
if(window.CKAutoLoader.retry_count==undefined || --window.CKAutoLoader.retry_count<=0){
console.error("CKAutoLoader: Can NOT inject scripts.");
return;
}
setTimeout(function(){window.CKAutoLoader.loader()},200);
return;
}
window.CKAutoLoader.loaded = true;
for(func in window.CKAutoLoader.cblist){
if(window.CKAutoLoader.cblist[func] instanceof Function){
try{
window.CKAutoLoader.cblist[func]();
}catch(e){
console.error("CKAutoLoader: Errored while call: "+func+e);
}
}else{
console.error("CKAutoLoader: Can NOT call: "+func);
}
}
},
};
}