sitejs 域名特定脚本——让每个网站行为都定制化
什么是 sitejs
sitejs/ 目录是 uWeb 最像"油猴"的功能——你可以为每个域名写独立的 JavaScript 脚本,这些脚本会自动在匹配域名的页面上执行。和油猴的区别是:不需要额外安装扩展,原生支持,性能更好,百万级脚本也不会拖慢浏览器。
文件命名规则
脚本文件必须以根域名命名,放在 sitejs/ 目录下:
sitejs/
├── baidu.com.js
├── tieba.baidu.com.js
├── github.com.js
└── example.com.js
匹配优先级
- 如果多个脚本都能匹配,以最长文件名为准
- 例如访问
tieba.baidu.com时,tieba.baidu.com.js优先于baidu.com.js - 支持两段、三段及少数四段域名(最后两段不超过 6 字如
com.cn可以取四段)
启用条件
- 脚本文件已放入
sitejs/目录 - 长按窗口管理按钮,勾选"执行网址用户脚本"
- 强制清空后台重启 uWeb(重要!)
脚本执行时机
sitejs/ 下的脚本在页面加载时自动注入执行,相当于油猴脚本的 @match 只匹配根域名下的所有 URL。你可以在脚本里自由使用 DOM API、fetch、WebSocket 等。
示例:移除百度首页某些元素
// sitejs/baidu.com.js
(function() {
'use strict';
// 移除首页顶部横幅
setTimeout(function() {
var banners = document.querySelectorAll('.s-top-left-new, .s-top-right-new');
banners.forEach(function(el) { el.remove(); });
}, 500);
// 修改搜索框占位文字
var input = document.getElementById('kw');
if (input) input.placeholder = '搜索...';
})();
配合 sitecss 使用
sitecss/ 目录的样式文件命名规则和 sitejs 完全相同(根域名)。额外地,sitecss/ 下以根域名命名的 .js 文件会在页面 HTML 解析前第一时间装载——这比 sitejs/ 的脚本更早执行,适合做"防检测"或"预处理"。
sitecss/
├── baidu.com.css # 百度的样式覆盖
└── baidu.com.js # 百度的前置脚本(HTML 解析前执行)
default.css 兜底
如果访问的域名在 sitecss/ 里没有匹配的 CSS 文件,且 sitecss/ 目录下存在 default.css,则自动应用 default.css 的样式。这个机制通常用来实现夜间模式:
- default.css 写全量的夜间模式样式
- sitecss/ 下对黑色主题的网站(如
github.com.css)放空文件或黑色背景样式 - 这样只有白色主题网站才会被 default.css 切成夜间模式
siteextra 预处理
siteextra/ 目录的 .html 文件用于对指定域名的 HTML 源代码做预处理:
siteextra/
├── baidu.com.html # 注意这里是完整域名,不是根域名
└── github.com.html
这个文件的规则和 sitejs/sitecss 不同:
- 按完整域名匹配,不是根域名
- 文件是 HTML 格式
- 如果文件以
<textarea>或<div><textarea>结尾,uWeb 会把页面原始 HTML 源码附加在 textarea 后面,供你的脚本预处理
对非 HTTP URL 的支持
sitejs/、sitecss/、sitecss/ 下以 .js 结尾的文件、sitecss/ 下以 .css 结尾的文件、siteextra/ 下以 .html 结尾的文件,都可以作用于非 HTTP URL——包括本地文件、浏览器界面本身等。
这意味着你甚至可以为配置目录下的 HTML5 应用(如 PDF 阅读器、EPUB 阅读器)写定制脚本。
性能保证
官方文档明确声明:即使 sitejs/ 目录下有百万级脚本文件存在,对浏览器性能也没有影响。脚本匹配用的是高效的域名哈希查找,不是逐个正则匹配。
下一章
继续了解脚本扩展体系: