如何用Userscript/Tampermonkey操纵匿名函数参数修改Mastodon通知音?
修改Mastodon网页实例默认通知音效的方案
需求可行性
完全可行,不管是自己托管的实例还是使用公共实例,都有对应的实现方法。
实现方法
1. 自己托管实例:修改源码重新部署
如果你是自己搭建的Mastodon,直接改源码是最彻底的方式:
- 找到源码路径
mastodon/app/javascript/mastodon/middleware/sounds.js - 修改
soundCache里的音效路径,比如把/sounds/boop.ogg和/sounds/boop.mp3改成你自己的音效路径(比如/sounds/my-notify.ogg) - 把你的自定义音效文件(需同时准备ogg和mp3格式,保证不同浏览器兼容性)放到项目的
public/sounds/目录下 - 运行编译命令:
RAILS_ENV=production bundle exec rails assets:precompile - 重启Mastodon服务,修改即可生效
2. 公共实例:浏览器端修改(无需源码权限)
临时修改(刷新页面后失效)
打开浏览器F12开发者工具,切换到「控制台」标签,运行以下代码(替换成你的音效链接):
// 创建自定义音效对象 const customSound = new Audio('你的自定义音效URL'); // 替换全局音效缓存 for (const key in window) { if (typeof window[key] === 'object' && window[key].boop) { window[key].boop = customSound; break; } } // 兜底:覆盖Audio播放逻辑 const originalPlay = Audio.prototype.play; Audio.prototype.play = function() { if (this.src.includes('/sounds/boop.')) { this.src = '你的自定义音效URL'; } return originalPlay.call(this); };
持久化修改(刷新页面仍生效)
用油猴脚本(Tampermonkey/Greasemonkey)实现,新建脚本后粘贴以下内容:
// ==UserScript== // @name Mastodon自定义通知音效 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 替换Mastodon网页版默认通知音效 // @match https://你的实例域名/* // @grant none // ==/UserScript== (function() { 'use strict'; // 替换成你的自定义音效链接 const CUSTOM_SOUND = '你的音效URL'; // 拦截音效创建逻辑 const originalCreate = window.createAudio || function(sources) { const audio = new Audio(); sources.forEach(s => audio.src = s.src); return audio; }; window.createAudio = function(sources) { const isDefaultBoop = sources.some(s => s.src.includes('/sounds/boop.')); if (isDefaultBoop) { const audio = new Audio(CUSTOM_SOUND); return audio; } return originalCreate(sources); }; // 替换已缓存的音效 setTimeout(() => { for (const key in window) { if (window[key]?.boop) { window[key].boop.src = CUSTOM_SOUND; break; } } }, 1000); })();
修改脚本里的 @match 为你使用的实例域名,CUSTOM_SOUND 替换成你的音效链接,保存启用即可。
替代方案
- 浏览器扩展替换音效:安装专门的音效替换扩展(比如Sound Replacer),添加规则将Mastodon的默认音效路径替换为你自定义的音效。
- 改用系统通知音效:在Mastodon设置里关闭网页通知音效,开启系统通知,然后修改操作系统的默认通知音效,这样收到通知时会用系统自定义的音效。
内容的提问来源于stack exchange,提问作者Aoi
相关产品推荐
相关产品推荐

