我的Greasemonkey脚本开始加载一系列图像.如何在需要时停止它

My Greasemonkey script starts a sequence of images loading. How do I stop it when desired?

本文关键字:脚本 Greasemonkey 开始 加载 图像 一系列 我的      更新时间:2023-09-26

我在拨号时使用ImgLikeOpera和Squid缓存代理来管理我的带宽。但是,我不能将其设置为一次加载一个图像,所以我有一个好主意,那就是编写一个脚本,在新的选项卡中一次打开页面上的每个图像,然后关闭它们,以便将它们保存在我的缓存中。

脚本运行得很好,添加了一个开始按钮,这样我就可以控制它何时开始。。。但不知道如何制作一个会中断进程的停止按钮。我试了很多东西,但都没用。。。

当它在循环中时,它似乎听不到循环外发生了什么。。。

我有一种感觉,有一种非常简单的方法可以做到这一点,但我越来越沮丧。这难道不是休息或返回的目的吗?

以下是我的脚本的相关部分:

var box = document.createElement ('div');
box.id = 'mySelectBox';
document.body.appendChild (box);
box.innerHTML = 'click>';
var searchButton = document.createElement ('div');
searchButton.className = 'mySearchButton';
searchButton.textContent = 'Search and open';
box.insertBefore (searchButton, box.nextSibling);
var stopButton = document.createElement ('div');
stopButton.className = 'myStopButton';
stopButton.textContent = 'Stop';
box.insertBefore (stopButton, box.nextSibling);
var mytable = document.getElementById ('lair-sort-pets').getElementsByTagName ('img');
var linksToOpen = [];
var mywin2 = null;
function openpics () {
    for (var J = 0, L = mytable.length; J < L; J++) {
        linksToOpen.push (mytable[J].src); //-- Add URL to list
    }
    openLinksInSequence ();
};
function openLinksInSequence () {
    if (mywin2) {
        mywin2.close ();
        mywin2 = null;
    }
    if (linksToOpen.length) {
        var link = linksToOpen.shift ();
        mywin2 = window.open (link, "my_win2");
        mywin2.addEventListener ('load', openLinksInSequence, false);
    }
}
searchButton.addEventListener ('click', openpics, true);
//stopButton.addEventListener ('click', , true);


如何使停止按钮真正停止加载更多链接?

使用全局状态变量。像这样:

var okayToOpenLinks = true;
searchButton.addEventListener ('click', openpics);
stopButton.addEventListener ('click', stopLinkSequence);
function openpics () {
    okayToOpenLinks = true;
    if (linksToOpen.length === 0) {
        for (var J = 0, L = mytable.length; J < L; J++) {
            linksToOpen.push (mytable[J].src); //-- Add URL to list
        }
    }
    openLinksInSequence ();
};
function stopLinkSequence () {
    okayToOpenLinks = false;
}
function openLinksInSequence () {
    if (mywin2) {
        mywin2.close ();
        mywin2 = null;
    }
    if (okayToOpenLinks  &&  linksToOpen.length) {
        var link = linksToOpen.shift ();
        mywin2 = window.open (link, "my_win2");
        mywin2.addEventListener ('load', openLinksInSequence, false);
    }
}