如何配置 Firefox 在设定的时间后自动停止加载页面?

如何配置 Firefox 在设定的时间后自动停止加载页面?

背景信息:

很多网站会一直加载(尤其是那些依赖实时 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"
            });
        }
    });
});

请记住,此扩展确实不是歧视。例如,如果你在网上购买某件商品,并且花费的时间比预期的要长一些,那么扩展将要停下来。

相关内容