
Informações básicas:
Existem muitos sites que carregam para sempre (especialmente aqueles que dependem de atualizações de JavaScript em tempo real). Versões modernas do Firefox (basicamente qualquer coisa desde 2015) usam uma quantidade extrema de tempo de CPU (e superaquecem a maioria dos laptops) enquanto aguardam o carregamento de qualquer guia.
A espera interminável pelo carregamento é evidente ao alternar para uma guia incorreta e verificar o botão recarregar/cancelar. Ele ficará preso como um X (cancelar) permanentemente até você clicar nele e cancelar manualmente.
O que estou pedindo:
Gostaria que uma configuração impusesse um limite máximo de tempo de carregamento em todas as guias. Qualquer guia que esteja carregando além do limite especificado será interrompida automaticamente (o mesmo que clicar no botão cancelar).
Due diligence (prova de que fiz minha lição de casa antes de perguntar):
Procurei por qualquer coisa que fizesse isso e encontrei um monte de coisas ruins:
Pesquisar "firefox restringe o tempo máximo de carregamento da página" no Google mostra várias dicas de desempenho destinadas a carregamentos de página mais rápidos. Infelizmente, isso é de pouca utilidade em uma página parcialmente quebrada que continua carregando para sempre.
Esse site (http://forums.mozillazine.org/viewtopic.php?f=38&t=2793647) disse que isso pode ser feito com uma extensão, embora eu não veja nenhuma extensão que faça isso.
Pesquisar "tempo de carregamento da página com limite de extensão do Firefox" no Google encontra apenas perfis de desempenho e otimização, nenhum dos quais é relevante.
Responder1
Embora pareça que ninguém tenha criado tal extensão antes, consegui realizar algo na forma de uma extensão do Firefox. A extensão pode ser baixada emaqui. Mas para escrever uma boa resposta, aqui está a parte importante:
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"
});
}
});
});
Lembre-se de que esta extensão nãoNÃOdiscriminar. Por exemplo, se você estiver comprando algo on-line e demorar um pouco mais do que o esperado, a extensãoVAIpare com isso.