背景
在 OBS 中使用浏览器源加载网页(如弹幕姬、通知栏等)时,常常遇到样式无法自定义的问题。尝试通过注入 CSS 或使用 JS 动态控制,效果并不理想。即使搭建了本地代理服务器,也会因为资源加载顺序、CSP 限制、动态 CSS 插入等问题导致失败。
为了解决这个问题,我找到了一个名为 forward
的工具。它允许通过 --overwrite
参数,精确覆盖页面加载过程中的任意资源文件,从而实现对页面样式的控制。
更重要的是,forward
提供了适用于 Windows 的二进制可执行文件,无需安装 Go 环境,直接下载即可使用。
初始尝试
最初,我尝试使用 Node.js 编写一个代理服务器,注入自定义样式。代码如下:
const express = require('express');
const app = express();
app.use('/', async (req, res) => {
const url = 'https://目标地址.com' + req.originalUrl;
const method = req.method;
const headers = { ...req.headers, host: undefined };
const proxyRes = await fetch(url, {
method,
headers,
body: ['GET', 'HEAD'].includes(method) ? undefined : req
});
let contentType = proxyRes.headers.get('content-type');
let body = await proxyRes.text();
if (contentType && contentType.includes('text/html')) {
body = body.replace('</head>', `
<style>#message { font-size: 20px; }</style>
</head>`);
}
res.setHeader('Content-Type', contentType);
res.send(body);
});
app.listen(3000);
虽然能够运行,但要完善资源注入、跨域控制、压缩解码、路径替换、CDN 处理等功能,复杂度远超预期。考虑到已有成熟工具可用,决定放弃自行开发,转而使用 forward
。
使用 forward
+ overwrite
的解决方案
安装 forward
方式一:下载二进制文件(推荐)
访问 Releases 页面,下载适用于你的操作系统的可执行文件,解压后即可使用。
方式二:使用 Golang 编译安装(可选)
go install github.com/axetroy/forward-cli/cmd/forward@latest
构建 overwrite
目录结构
假设网页中加载了一个远程字体:
<link rel="stylesheet" href="//at.alicdn.com/t/font_2143783_iq6z4ey5vu.css">
需要在本地创建以下路径,并替换文件内容:
overwrites/
└── at.alicdn.com/
└── t/
└── font_2143783_iq6z4ey5vu.css
内容可以是:
body { font-family: '你的字体' !important; }
/* 或者移除 iconfont */
覆盖动态加载的 CSS
有些 CSS 是通过 JS 动态插入的,例如:
const style = document.createElement('link');
style.rel = 'stylesheet';
style.href = 'https://cdn.xxx.com/ui.css';
document.head.appendChild(style);
找到这段 JS 的路径,在 overwrite
中对应位置创建文件,并注释掉插入语句。
注入最终的样式覆盖
找到最后加载的 CSS 文件(通常在 HTML 尾部),在其中添加自定义样式:
/* 自定义样式 */
#message {
display: inline;
font-size: 20px;
}
yt-live-chat-renderer * {
font-size: 20px;
}
启动代理
forward --port=3000 --proxy-external --overwrite=./overwrites https://目标地址.com
注意:如果不需要代理外部资源,可省略 --proxy-external
参数。
在 OBS 浏览器源中填写:
http://localhost:3000/live
效果总结
- 样式准确注入,字体、布局可自定义
- 所有远程资源本地化,便于控制
- JS 插入逻辑可精确控制
- OBS 渲染稳定,无异常
此方案适用于无法注入样式的嵌入式网页,特别是 OBS 浏览器源等内嵌 Chromium 内核的容器。
以上就是我在 OBS 中使用 forward
+ overwrite
完美解决浏览器源样式注入问题的经验分享。希望对大家有所帮助!