1

使用以下代码,我得到图像的大小:

function getFileSize(img) {
    GM_xmlhttpRequest({
        url: img.src,
        method: "HEAD",
        onload: function(response) {
            response.responseHeaders.match(/Content-Length: (\d+)/);
            size = RegExp.$1;
            if (size > maxS)
                // If size > max. allowed size
                markImage(img);
            else if (img.height > maxH)
                    // If img.height > max. allowed height
                markImage(img);
        }
    }); 
}

如您所见,上面的函数调用了 markImage

function markImage(img) {
    img.style.border = "7px solid #990099";
    showDialog(); // This function shows a dialog
}

所以我想改变那些符合特定条件的图像的风格。

如果图像与 getFileSize 上的条件匹配,则正确显示在 markImage 上调用的对话框然而,风格并不总是改变。

据我所知,脚本在 时完美运行size > maxS,但在 时并不总是有效img.height > maxH。实际上,如果img.height > maxH,如果我刷新网站,脚本就可以工作,但在第一次尝试时它不会。

一方面,考虑到markImage被称为onload的事实,这似乎不是与同步相关的问题。此外,对话框在必须显示时正确显示。另一方面,我也尝试使用setAttribute更改样式,但没有任何区别。所以我不知道为什么这个“随机”失败。

在此先感谢您的帮助。

4

1 回答 1

1

好的,如果showDialog();始终正确触发,则排除了图像加载和渲染延迟。

其他一些可能导致故障的事情:

  1. 其他一些 CSS 正在覆盖markImage(). 将代码更改为:

    img.style.setProperty ("border", "7px solid #990099", "important");
    
  2. 页面有修改或重新加载目标图像的 JS... 在此类 JS 之后酌情拦截、阻止或清理。


如果showDialog();并不总是正确开火,那是另一回事,但您表示情况并非如此。

如果发生了其他事情,如果没有看到目标页面,也许还有整个 GM 脚本,我们就无法判断。链接到那些。

于 2012-05-15T20:02:05.870 回答