背景信息:
很多网站会一直加载(尤其是那些依赖实时 JavaScript 更新的网站)。现代版本的 Firefox(基本上是 2015 年以后的所有版本)在等待任何选项卡加载时会占用大量 CPU 时间(并使大多数笔记本电脑过热)。
切换到有问题的选项卡并检查重新加载/取消按钮,就会发现无休止的等待加载。它会永久停留为 X(取消),直到您单击它并手动取消。
我的要求是:
我想要一个配置设置来限制所有选项卡的最大加载时间。任何加载时间超过指定限制的选项卡都将自动停止(与单击取消按钮相同)。
尽职调查(证明我在提问之前已经做好了准备):
我搜索了所有可以做到这一点的方法,但发现了一堆行不通的东西:
在 Google 中搜索“firefox 限制最大页面加载时间”,会出现一堆旨在加快页面加载速度的性能提示。不幸的是,这对于部分损坏且需要一直加载的页面来说没什么用。
本网站(http://forums.mozillazine.org/viewtopic.php?f=38&t=2793647) 说可以通过扩展来实现,但我没看到任何可以做到这一点的扩展。
在 Google 中搜索“firefox 扩展限制页面加载时间”只会找到性能分析和优化,但这些都与此无关。
答案1
虽然似乎之前没有人创建过这样的扩展,但我还是能够以 Firefox 扩展的形式完成一些事情。该扩展可以从以下网址下载这里。但为了写出好的答案,以下是重要的部分:
background.js
function createAlarm(tabId) {
function onError(error) {
console.log(`Error: ${error}`);
}
function onGot(item) {
var timeout = 15;
if (item.timeout) {
timeout = item.timeout;
}
browser.alarms.create(tabId + '', { delayInMinutes: timeout / 60 });
}
var getting = browser.storage.sync.get("timeout");
getting.then(onGot, onError);
}
browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
var id = tabId + '';
if ("status" in changeInfo && changeInfo.status === "loading") {
browser.alarms.get(id).then((alarm) => {
if (alarm) {
browser.alarms.clear(id).then((good) => {
createAlarm(id);
});
}
else {
createAlarm(id);
}
});
}
});
browser.alarms.onAlarm.addListener((alarm) => {
var tabId = parseInt(alarm.name);
browser.tabs.get(tabId).then((tab) => {
if (tab.status === "loading") {
browser.tabs.executeScript(tabId, {
code: "window.stop(); document.title = 'TIMED OUT | '+document.title;",
allFrames: true,
runAt: "document_start"
});
}
});
});
请记住,此扩展确实不是歧视。例如,如果你在网上购买某件商品,并且花费的时间比预期的要长一些,那么扩展将要停下来。