[油猴脚本开发指南] 检查当前脚本环境是TamperMonkey环境还是ScriptCat环境
# 检查当前脚本环境是TamperMonkey环境还是ScriptCat环境## 前言
统一构建一套代码时, 如果脚本同时发布在 **GreasyFork** 和 **ScriptCat** 上, 并且具有一些用户配置的时候, 就会出现一些不统一的情况.
因为 *ScriptCat* 本身有一套**配置系统**, 但是 *TamperMonkey* 是需要自己手写配置系统的(比如写在**菜单配置项**或者提供一个进入配置弹窗的**页面按钮**).
> 当然你可以让你手写的配置系统也在 *ScriptCat* 上显示 ~~(但是这不好看)~~
## 实现原理
在脚本信息中授权一个 ScriptCat CatApi, 比如 `CAT_userConfig` , 调用此 api . 如果报错则说明当前环境是 *TamperMonkey* 环境, 如果不报错则说明当前环境是 *ScriptCat* 环境.
## 代码
> `TypeScript`
```ts
// ==UserScript==
// /* Any UserScript Info */
// @grant CAT_userConfig
// ==/UserScript==
/**
* 检查当前的环境是否是脚本猫环境
* @Return {boolean}
* */
const checkScriptCatEnvironment = (): boolean => {
let isScriptCatEnvironment: boolean;
try {
// @ts-ignore 忽略未引入的 CAT_userConfig 函数
CAT_userConfig.toString();
isScriptCatEnvironment = true;
}
catch ( e ) {
isScriptCatEnvironment = false;
}
return isScriptCatEnvironment;
};
```
> `JavaScript`
```js
// ==UserScript==
// /* Any UserScript Info */
// @grant CAT_userConfig
// ==/UserScript==
/**
* 检查当前的环境是否是脚本猫环境
* @return {boolean}
* */
const checkScriptCatEnvironment = () => {
let isScriptCatEnvironment;
try {
CAT_userConfig.toString();
isScriptCatEnvironment = true;
} catch (e) {
isScriptCatEnvironment = false;
}
return isScriptCatEnvironment;
};
```
## 使用例
- (https://scriptcat.org/zh-CN/script-show-page/1603/code)
可以不用这么麻烦,直接调用GM_info就能看到是什么脚本管理器
!(data/attachment/forum/202403/14/092059dz5d1hjmauhsdd22.png) steven026 发表于 2024-3-14 09:21
可以不用这么麻烦,直接调用GM_info就能看到是什么脚本管理器
!(data/attachment/forum/202 ...
哥哥确实麻烦了,这才是正解 王一之 发表于 2024-3-14 09:33
哥哥确实麻烦了,这才是正解
没用过 `GM_info `, 是复杂了
页:
[1]