設定した時間が経過するとページの読み込みを自動的に停止するように 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"
            });
        }
    });
});

この拡張機能はない差別する。例えば、オンラインで何かを購入して、予想よりも少し時間がかかった場合、延長は意思やめて。

関連情報