使用vite 插件开发油猴脚本
zgrowth 7/11/2024
# 关于如何使用vite-plugin-monkey
(opens new window)开发油猴脚本
根据文档使用pnpm来进行安装
pnpm create monkey
1
然后你能从以下模板选择
这里我使用的是react + js,然后我又安装了一个antd
和dayjs
然后就可以开发了,需要注意的是
`unsafeWindow` 是用于在用户脚本(如 Greasemonkey、Tampermonkey 等)中访问页面原生的 `window` 对象。通常情况下,由于安全考虑,用户脚本运行在沙盒环境中,与页面脚本是隔离的,它们各自有独立的全局对象(`window`)。`unsafeWindow` 允许用户脚本获取对页面原生 `window` 对象的访问权限,从而直接操作页面的 JavaScript 环境。
### 使用场景
有时你需要访问页面的原生 JavaScript 对象、函数或变量,或者希望与页面中的代码进行更深层次的交互,这时候 `unsafeWindow` 就显得非常有用。例如,你想调用页面脚本中定义的函数或者修改页面脚本中的变量。
### grant `unsafeWindow`
在用户脚本中,`@grant` 元数据指令用于声明所需的特殊权限。`@grant unsafeWindow` 允许用户脚本访问和操作页面的原生 `window` 对象。
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
开发完成脚本后,构建需要修改一下配置
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import monkey, { cdn } from 'vite-plugin-monkey';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
react(),
monkey({
entry: 'src/main.jsx', // 入口
userscript: {
icon: 'https://www.google.com/s2/favicons?sz=64&domain=hifini.com', // 图标
name: 'hifini音乐播放管理', // 脚本名称
namespace: 'http://tampermonkey.net/',
description: '在HiFiNi网站自动播放歌曲,可以自定义播放列表', // 脚本描述
match: ['https://www.hifini.com/*'], // 作用于的网址
author: 'zs', // 作者
version: '1.0.2', // 版本号
require: [
'https://cdn.jsdelivr.net/npm/dayjs@1.11.11/dayjs.min.js' // antd需要用到的dayjs也需要引入
],
grant: ['unsafeWindow'], // 使用window对象
},
build: {
externalGlobals: {
react: cdn.jsdelivr('React', 'umd/react.production.min.js'),
'react-dom': cdn.jsdelivr(
'ReactDOM',
'umd/react-dom.production.min.js',
),
antd: cdn.jsdelivr('antd', 'dist/antd.min.js'), // antd用cdn引入
},
autoGrant: false,
},
}),
],
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37