120 lines
5.6 KiB
TypeScript
120 lines
5.6 KiB
TypeScript
import UserScriptEngine from "../../enum/UserScriptEngine";
|
|
import CommonUtils from "../../class/utils/CommonUtils";
|
|
import Alert from "../../class/utils/Alert";
|
|
import { Container } from "../../container/Container";
|
|
import Logger from "../../class/Logger";
|
|
|
|
// gs loader
|
|
export default function loadGS(use) {
|
|
let logger = Container.factory(Logger);
|
|
if (use === UserScriptEngine.PDA) {
|
|
let ifr: HTMLIFrameElement = document.querySelector('#wh-gs-loader-ifr');
|
|
if (ifr) {
|
|
new Alert('飞贼小助手已经加载了');
|
|
return;
|
|
}
|
|
const container = document.createElement('div');
|
|
container.id = 'wh-gs-loader';
|
|
ifr = document.createElement('iframe');
|
|
ifr.id = 'wh-gs-loader-ifr';
|
|
ifr.src = 'https://www.torn.com/crimes.php';
|
|
container.append(ifr);
|
|
document.body.append(container);
|
|
CommonUtils.addStyle(`
|
|
#wh-gs-loader {
|
|
position:fixed;
|
|
top:0;
|
|
left:0;
|
|
z-index:100001;
|
|
}
|
|
`);
|
|
let notify = new Alert('加载中');
|
|
ifr.onload = () => {
|
|
notify.close();
|
|
const _window = ifr.contentWindow;
|
|
const _docu = _window.document;
|
|
_docu.head.innerHTML = '';
|
|
_docu.body.innerHTML = '';
|
|
notify = new Alert('加载依赖');
|
|
CommonUtils.COFetch('https://cdn.staticfile.org/vue/2.2.2/vue.min.js')
|
|
.then(vuejs => {
|
|
notify.close();
|
|
_window.eval(vuejs);
|
|
_window.GM_getValue = (k, v = undefined) => {
|
|
const objV = JSON.parse(_window.localStorage.getItem('wh-gs-storage') || '{}')[k];
|
|
return objV || v;
|
|
};
|
|
_window.GM_setValue = (k, v) => {
|
|
const obj = JSON.parse(_window.localStorage.getItem('wh-gs-storage') || '{}');
|
|
obj[k] = v;
|
|
_window.localStorage.setItem('wh-gs-storage', JSON.stringify(obj));
|
|
};
|
|
_window.GM_xmlhttpRequest = function (opt) {
|
|
// 暂不适配pda post
|
|
if (opt.method.toLowerCase() === 'post') return;
|
|
CommonUtils.COFetch(opt.url).then(res => {
|
|
const obj = {
|
|
responseText: res
|
|
};
|
|
opt.onload(obj);
|
|
});
|
|
};
|
|
notify = new Alert('加载飞贼小助手');
|
|
CommonUtils.COFetch(`https://gitee.com/ameto_kasao/tornjs/raw/master/GoldenSnitch.js?${ performance.now() }`)
|
|
.then(res => {
|
|
_window.eval(res.replace('http://222.160.142.50:8154/mugger', `https://api.ljs-lyt.com/mugger`));
|
|
_window.GM_setValue("gsp_x", 10);
|
|
_window.GM_setValue("gsp_y", 10);
|
|
notify.close();
|
|
notify = new Alert('飞贼小助手已加载', { timeout: 1 });
|
|
const gsp: HTMLElement = _docu.querySelector('#gsp');
|
|
const thisRun = () => {
|
|
ifr.style.height = `${ gsp.offsetHeight + 10 }px`;
|
|
ifr.style.width = `${ gsp.offsetWidth + 20 }px`;
|
|
gsp.style.top = '10px';
|
|
gsp.style.left = '10px';
|
|
};
|
|
new MutationObserver(thisRun).observe(gsp, { childList: true, subtree: true });
|
|
thisRun();
|
|
if (logger.debug()) _window.GM_setValue("gsp_showContent", true)
|
|
});
|
|
});
|
|
};
|
|
return;
|
|
}
|
|
if (use === UserScriptEngine.GM) {
|
|
if (typeof window.Vue !== 'function') {
|
|
let notify = new Alert('正在加载依赖');
|
|
CommonUtils.COFetch('https://cdn.staticfile.org/vue/2.2.2/vue.min.js')
|
|
.then(VueJS => {
|
|
window.eval(VueJS);
|
|
notify.close();
|
|
notify = new Alert('已载入依赖');
|
|
window.GM_getValue = (k, v = undefined) => {
|
|
const objV = JSON.parse(window.localStorage.getItem('wh-gs-storage') || '{}')[k];
|
|
return objV || v;
|
|
};
|
|
window.GM_setValue = (k, v) => {
|
|
const obj = JSON.parse(window.localStorage.getItem('wh-gs-storage') || '{}');
|
|
obj[k] = v;
|
|
window.localStorage.setItem('wh-gs-storage', JSON.stringify(obj));
|
|
};
|
|
// TODO
|
|
// window.GM_xmlhttpRequest = GM_xmlhttpRequest;
|
|
CommonUtils.COFetch(`https://gitee.com/ameto_kasao/tornjs/raw/master/GoldenSnitch.js?${ performance.now() }`)
|
|
.then(GSJS => {
|
|
window.eval(GSJS);
|
|
if (logger.debug()) window.GM_setValue("gsp_showContent", true);
|
|
notify.close();
|
|
notify = new Alert('已载入飞贼助手');
|
|
})
|
|
.catch(err => new Alert(`PDA API错误。${ JSON.stringify(err) }`));
|
|
})
|
|
.catch(err => new Alert(JSON.stringify(err)));
|
|
} else {
|
|
new Alert('飞贼助手已经加载了');
|
|
}
|
|
return;
|
|
}
|
|
new Alert('暂不支持');
|
|
} |