scriptscat / scriptcat Goto Github PK
View Code? Open in Web Editor NEW脚本猫,一个可以执行用户脚本的浏览器扩展
Home Page: https://docs.scriptcat.org
License: GNU General Public License v3.0
脚本猫,一个可以执行用户脚本的浏览器扩展
Home Page: https://docs.scriptcat.org
License: GNU General Public License v3.0
脚本列表里的最后一个脚本,它的编辑按钮——一个笔一样的icon,被那个大的加号“+”挡住了
https://sleazyfork.org/zh-CN/scripts/407833-ehsyringe
用油猴能正常使用,scriptcat则不行
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://www.baidu.com/*
// @icon https://www.google.com/s2/favicons?domain=baidu.com
// @require file:///Users/xxx/xxx/xxx/bundle2.js
// @grant GM_log
// ==/UserScript==
(function() {
'use strict';
// Your code here...
console.log('window.initDb')
console.log(window.initDb())
// Your code here...
})();
我已经开启了 允许访问文件网址 选项
脚本派派助手无法加载
每次关闭chrome的时候重新进入chrome都会把脚本猫关闭,需要手动进管理拓展程序开启
我tampermonkey,一堆脚本,想迁移过来。
tampermonkey 能很方面的导出到压缩包,但我还不清楚怎么导入压缩包。
是不是还没这功能
当前edge版本为98.0.1108.62 (官方内部版本) (64 位)
脚本猫版本为0.9.0
每次Edge自动更新后,脚本猫内存储的所有内容都会消失,包括登录状态、已安装脚本及脚本设置内容
很多脚本都是GM.xmlHttpRequest,目前看起来scriptcat 还不太支持?
使用脚本自动翻页时,每进入一个没进过的网站就会显示,能否加个允许该脚本访问全部域名(非临时)
还有版本0.9.0,是下个版本没做完吗😂
在调试脚本时,发现GM_getValue每次获取都为旧值。
如下图,值已经修改为字符串的123123,但是获取到还是123(这个值是修改为123123之前的值)
通过调试插件源码,发现插件调用了background.js的buildScriptCache方法
在buildScriptCache方法中debug,发现resolve的值已经是最新的值了。
然而在实际获取的返回值,发现是旧的值,如下图:
我测试过firefox,发现firefox也有这个问题,个人比较偏向是插件层做了数据传输过程的转换,从而导致数据前后不一致,但是在查看源码暂时没找到。大佬是否能解答一下?
background和前端的代码属于不同进程,进程之间传输数据出错了?
作者有考虑开源吗?
建议:GM_setValue储存的数据建议增加一栏,不要在数据前用数据类型英文首字母标注,手动修改时容易出错
建议:设置增加开关脚本时自动刷新当前网页功能,Tampermonkey 和暴力猴都有的,调试时挺有用的
bug:打开脚本列表主页后,拉动主页标签成独立窗口后,此时点击插件图标当前页运行脚本处会出现多个同名历史代码在同时运行,此bug我不知道什么操作引起的,你可以尝试复现
chrome版本: 97.0.4692.71(正式版本) (64 位)
脚本猫版本: 0.7.7
以下测试脚本, 在脚本猫的后台脚本
中无法生成文件, 在普通脚本
中可以
脚本:
// ==UserScript==
// @name New Userscript
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.1.0
// @description try to take over the world!
// @author You
// @background
// @require https://cdn.bootcdn.net/ajax/libs/xlsx/0.17.4/xlsx.full.min.js
// ==/UserScript==
return new Promise((resolve, reject) => {
let output = [
{name: 'John', Age: 18},
{name: 'Mike', Age: 20}
];
let o = XLSX.utils.json_to_sheet(output);
let wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, o, 'Sheet1');
XLSX.writeFile(wb, 'test 2022-1-7.xlsx');
resolve();
});
在tampermonkey中,@match “https://hostname” 规则仅会使脚本在该域名的主页运行,即pathname=="/"时运行
而在scriptcat中,@match “https://hostname” 规则会使脚本在该域名下的所有页面运行,和@match “https://hostname/*” 的效果相同
我想接入腾讯云的前端监控,来做一些日志上报。脚本链接为:https://cdn-go.cn/aegis/aegis-sdk/latest/aegis.min.js
测试时,发现脚本的响应头类型为:application/x-javascript。导出加载时,content为空,如下图
调试发现,代码中有判断响应头返回的类型。在这个map中加上application/x-javascript则可以正常了。
建议加上application/x-javascript这个响应类型。
低版本浏览器好像会因为Monaco-editor的原因导致打开显示空白页面,background报错
某打包浏览器可复现
最近在写一个跨网页的脚本,发现了GM_addValueChangeListener的这个问题。
同样的写法在 Tampermoney 里运行正常,而脚本猫里无效。由于脚本的代码过于复杂,下面的代码是同样的思路,能复现该问题。
// ==UserScript==
// @name New Userscript
// @match *://www.baidu.com/
// @match *://fanyi.baidu.com/*
// @grant GM_setValue
// @grant GM_addValueChangeListener
// ==/UserScript==
if (document.domain == "fanyi.baidu.com")
$('#baidu_translate_input').keyup(function () { GM_setValue("text", document.getElementById("baidu_translate_input").value) })
else
GM_addValueChangeListener("text", function (name, old_value, new_value, remote) {
console.log(name, old_value, new_value, remote)
document.querySelector("#kw").value = new_value
})
另外,脚本猫的编辑页面有些小问题:
之前eslint配置错误,现在修复后代码大片大片的红。。。。。这种eslint的错误就看一个处理一个吧,太多了😭。
然后一些设计的地方也比较乱,期望进行整理,记录如下
此处将sendResponse删除,将返回值作为send内容,undefined不进行发送,另外对其他发消息的代码进行整理:apps/Manager::listenerMessage 主要是规范好 Promise的返回值 <any> 表示将发送数据 <void> 表示将由方法自己发送数据
export type MessageCallback = (body: any, sendResponse: (response?: any) => void, sender?: chrome.runtime.MessageSender) => Promise<any> | any;
// 监听msg操作的只能有一个
public static listenerMessage(topic: string, callback: MessageCallback) {
const val = new Map();
topicMap.set(topic, val);
val.set(callback, (msg: any, port: chrome.runtime.Port) => {
callback(msg, (resp) => { port.postMessage(resp) }, port.sender);
});
}
一些油猴的API通信方式优化一下,主要是postMessage,让返回值/resolve也支持返回
export type Api = (grant: Grant, postMessage: IPostMessage, script?: Script) => Promise<any> | any;
支持资源释放freed
// 资源释放,后台脚本只有脚本id,当窗口是关闭而不是刷新时windowClose为true
// TODO: 实现脚本id
export type FreedCallback = (id: number, tabId?: number, windowClose?: boolean) => void;
将释放的逻辑放到freed中,获取和点击的逻辑放到listener中,删除 ScriptManager::listenScriptMath 中的相关逻辑
// ==UserScript==
// @name New Userscript2222
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.1.0
// @description try to take over the world!
// @author You
// @crontab * * once * *
// @grant GM_log
// @grant GM.xmlHttpRequest
// @grant GM_xmlhttpRequest
// @connect baidu.com
// @connect httpbin.org
// ==/UserScript==
console.log = (...arg) => {
GM_log(arg.map(it => typeof it == 'string' ? it : JSON.stringify(it)).join(","))
}
return new Promise((resolve, reject) => {
// Your code here...
// downloadImg('http://httpbin.org/image/jpeg').then(resolve);
GM.xmlHttpRequest(
{
method: 'GET',
url: 'http://httpbin.org/image/jpeg',
// headers: { 'Content-Type': 'text/xml', "Accept": "text/xml" },
responseType: "blob",
// data: xmlstring,
onload: function (response) { console.log('load');resolve() },
onreadystatechange: function (response) { console.log('statechange', response) },
}
)
});
页面能进onload, 后台就进不了
如题
在tampermonkey 和scriptcat里行为不一样;
scriptcat里没有提交上去,好像只提交了一个[object object]
字符串
// ==UserScript==
// @name test Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match http*://*/*
// @icon https://www.google.com/s2/favicons?domain=httpbin.org
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function () {
'use strict';
const url = 'http://httpbin.org/image/jpeg'
GM_xmlhttpRequest({
method: 'GET',
url: url,
responseType: "blob",
onload: function (req) {
console.log(req.status, req.response, typeof req.response)
GM_xmlhttpRequest({
method: 'PUT',
url: 'http://httpbin.org/anything',
data: req.response,
onload: function (req) {
console.log(req.status, req.response)
}
})
}
});
// Your code here...
})();
在scriptcat中使用如下代码指定headers
GM_xmlhttpRequest({
method: 'GET',
url: 'http://xxxx',
headers: {
referer: "http://microsoft.com",
origin: "http://microsoft.com"
}
发现它会把Origin和Referer请求头变成
X-Cat-20379D59-3753-4Bc2-9Aac-7Fd1601C4454-Origin: http://microsoft.com
X-Cat-20379D59-3753-4Bc2-9Aac-7Fd1601C4454-Referer: http://microsoft.com
而且还莫名多了一个X-Cat-xxx-Scriptcat的出来
X-Cat-20379D59-3753-4Bc2-9Aac-7Fd1601C4454-Scriptcat: true
导致最终请求失败。
而我换成用tampermonkey去验证了一下,发送的请求头则都是标准和正确的值,也没有多余的X-Cat-xxx-Scriptcat出现。
这是为什么,需要如何避免?
Firefox最新版,后台脚本
Tampermonkey support these powerful API.
每次登录以后,关闭浏览器过一段时间打开浏览器,插件的登录状态丢失,导致云同步经常失败。
操作系统:win7 、win11、UOS
浏览器:360极速浏览器、EDGE
为什么脚本猫页面没有新建脚本选项?
rt
目前对于A标签的渲染依旧存在问题
来挂个ISSUE鞭笞一之
日志打印:subscribe:1 error: Error: Network Error
内容: check subscribe
缺乏author等属性
GM_xmlhttpRequest与GM_download返回对象无属性
尝试将这个功能作为可选吧
// @crontab 1 58 22,23 * * *
这个脚本一直早上10点执行,不知道为啥
when you set match is local file
the script is show run this user script
but not any operation
my code only have alert
but it is not run and show alert
`// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @Version 0.1
// @description try to take over the world!
// @author You
// @match file:///C:/Users/%E6%B5%8B%E8%AF%95/test.html
// @ICON https://www.google.com/s2/favicons?sz=64&domain=undefined.
// ==/UserScript==
(function() {
'use strict';
alert('888')
// Your code here...
})();`
关于哪一项功能
与脚本的兼容性问题
问题描述
使用 Bili Evolved 时,只要修改任意一个设置,都会在下一次载入脚本时全部崩溃无法载入
插件版本
0.6.3
浏览器版本
Chrome 94.0.4606.81
错误信息
Error Logs Here
求大佬看看重庆大学网络教育学院,这个平台没支持。如果可以的话接受定制脚本。
比如说 await CAT_runScript('scriptName');
这样可以从一些页面脚本,直接调用后台脚本、定时脚本;或者定时脚本相互调用。
大文件导入好像会没有任何反应
排查一下是不是浏览器的收消息限制
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.