Firefox书签小工具:打开about:memory触发内存优化功能遇阻
解决Firefox书签小工具调用about:memory内存回收功能的问题
about:memory属于Firefox的chrome特权页面,运行在与普通网页完全隔离的权限上下文环境中。普通书签小工具、页面控制台都属于content上下文,无法直接访问该页面的全局函数(比如doMMU())或操作DOM元素,这就是你遇到无提示错误的原因。
下面提供两种可行的实现方式:
方式一:使用用户脚本(Tampermonkey/Greasemonkey)
编写用户脚本自动触发内存回收,脚本会在你打开about:memory时自动执行:
// ==UserScript== // @name 自动触发Firefox内存回收 // @match about:memory // @run-at document-idle // ==/UserScript== (function() { // 直接调用页面内置的doMMU函数 if (typeof doMMU === 'function') { doMMU(); // 可选:执行后自动关闭页面 setTimeout(() => window.close(), 800); } })();
安装脚本后,只要打开about:memory页面,就会自动触发内存回收操作。
方式二:使用Firefox WebExtension(扩展)
如果需要通过书签点击直接触发,可以编写一个轻量扩展:
- 创建
manifest.json文件:
{ "manifest_version": 3, "name": "内存一键回收", "version": "1.0", "permissions": ["tabs"], "background": { "scripts": ["background.js"] }, "bookmarks": { "default_title": "回收Firefox内存", "default_icon": "icon.png" } }
- 创建
background.js文件:
chrome.bookmarks.onClicked.addListener(async () => { // 打开about:memory页面 const tab = await chrome.tabs.create({url: "about:memory"}); // 页面加载完成后注入脚本调用doMMU chrome.tabs.onUpdated.addListener(function listener(tabId, info) { if (tabId === tab.id && info.status === "complete") { chrome.tabs.executeScript(tabId, { code: "if(typeof doMMU === 'function') doMMU(); setTimeout(() => window.close(), 800);" }); chrome.tabs.onUpdated.removeListener(listener); } }); });
将文件打包成扩展安装后,书签栏会出现对应的按钮,点击即可完成内存回收。
注意:Firefox对chrome特权页面的访问限制严格,普通书签小工具因权限不足无法实现需求,上述两种方式是当前可行的替代方案。
内容的提问来源于stack exchange,提问作者hedgehog
相关产品推荐
相关产品推荐

