之前有朋友和我聊了一下刷课脚本,我想到了一个比较新的模式,前端提交任务,然后使用后台脚本来进行任务的执行,使用http封包的技术,这样可以不用再在前台挂着浏览器,并且资源大大节省。(平台也是这种技术)
怎么实现是个问题,于是想到了油猴的这个API:GM_addValueChangeListener
可以监听值的变化,脚本猫的话实现了同一个namespace(已更新为storageName )之间的共享Value,感觉可以利用这个特性去实现 油猴脚本与后台脚本的一个通信交互,例子如下:
不过觉得应该可以有一套更好的API来实现前后端脚本的交互,后续继续考虑一下去。
// ==UserScript==
// @name 前端任务提交脚本
// @namespace test
// @version 0.1.0
// @description try to take over the world!
// @author You
// @match https://bbs.tampermonkey.net.cn/*
// @grant GM_setValue
// @storageName test
// ==/UserScript==
let btn = document.createElement('button');
btn.innerText = "提交一个任务给后台脚本";
btn.onclick = () => {
GM_setValue('task', '任务详情...');
alert('任务提交成功');
}
document.querySelector('#diymsg1').append(btn);
// ==UserScript==
// @name 后端任务处理脚本
// @namespace test
// @version 0.1.0
// @description try to take over the world!
// @author You
// @grant GM_notification
// @grant GM_addValueChangeListener
// @background
// @storageName test
// ==/UserScript==
return new Promise((resolve, reject) => {
GM_addValueChangeListener("task", (name, oldVal, newVal, remote) => {
console.log(name, oldVal, newVal, remote);
GM_notification({
title: "任务处理",
text: newVal,
});
})
});