Yiero 发表于 2024-3-13 23:45:00

[油猴脚本开发指南] 检查当前脚本环境是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)

steven026 发表于 2024-3-14 09:21:02

可以不用这么麻烦,直接调用GM_info就能看到是什么脚本管理器
!(data/attachment/forum/202403/14/092059dz5d1hjmauhsdd22.png)

王一之 发表于 2024-3-14 09:33:29

steven026 发表于 2024-3-14 09:21
可以不用这么麻烦,直接调用GM_info就能看到是什么脚本管理器
!(data/attachment/forum/202 ...

哥哥确实麻烦了,这才是正解

Yiero 发表于 2024-3-14 20:28:51

王一之 发表于 2024-3-14 09:33
哥哥确实麻烦了,这才是正解

没用过 `GM_info `, 是复杂了
页: [1]
查看完整版本: [油猴脚本开发指南] 检查当前脚本环境是TamperMonkey环境还是ScriptCat环境