Как настроить Firefox на автоматическую остановку загрузки страниц по истечении заданного периода времени?

Как настроить Firefox на автоматическую остановку загрузки страниц по истечении заданного периода времени?

Справочная информация:

Есть много сайтов, которые загружаются вечно (особенно те, которые зависят от обновлений JavaScript в реальном времени). Современные версии Firefox (в основном все, что было выпущено после 2015 года) используют огромное количество процессорного времени (и перегревают большинство ноутбуков) в ожидании загрузки любой вкладки.

Бесконечное ожидание загрузки становится очевидным, если переключиться на проблемную вкладку и проверить кнопку перезагрузки/отмены. Она будет зависать как X (отмена) навсегда, пока вы не нажмете на нее и не отмените вручную.

Что я прошу:

Я хотел бы, чтобы настройка конфигурации налагала ограничение максимального времени загрузки на все вкладки. Любая вкладка, которая загружается дольше указанного лимита, будет автоматически остановлена ​​(так же, как нажатие кнопки отмены).

Проверка благонадежности (доказательство того, что я выполнил домашнюю работу, прежде чем задать вопрос):

Я искал что-нибудь, что могло бы это сделать, и нашел кучу бесполезных вариантов:

Поиск "firefox restrict maximum page load time" в Google выдает кучу советов по производительности, направленных на более быструю загрузку страниц. К сожалению, это малополезно для частично сломанной страницы, которая загружается вечно.

Этот сайт (http://forums.mozillazine.org/viewtopic.php?f=38&t=2793647) сказал, что это можно сделать с помощью расширения, хотя я не вижу никаких расширений, которые это делают.

Поиск «расширение Firefox ограничивает время загрузки страницы» в Google находит только профилирование производительности и оптимизацию, ни один из которых не имеет отношения к делу.

решение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"
            });
        }
    });
});

Имейте в виду, что это расширение неНЕТдискриминировать. Например, если вы покупаете что-то онлайн и это занимает немного больше времени, чем ожидалось, расширениеВОЛЯпрекрати это.

Связанный контент