
Справочная информация:
Есть много сайтов, которые загружаются вечно (особенно те, которые зависят от обновлений 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"
});
}
});
});
Имейте в виду, что это расширение неНЕТдискриминировать. Например, если вы покупаете что-то онлайн и это занимает немного больше времени, чем ожидалось, расширениеВОЛЯпрекрати это.