更改图像样式有时会失败(JavaScript)

更改图像样式有时会失败(JavaScript),javascript,css,greasemonkey,Javascript,Css,Greasemonkey,使用以下代码,我可以得到图像的大小: function getFileSize(img) { GM_xmlhttpRequest({ url: img.src, method: "HEAD", onload: function(response) { response.responseHeaders.match(/Content-Length: (\d+)/); size = RegExp.$

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

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:

所以我想改变那些符合特定条件的图像的样式

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

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

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

提前感谢您的帮助。

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

其他一些可能导致故障的因素:

  • 其他一些CSS正在覆盖
    markImage()
    中的CSS。将代码更改为:

    img.style.setProperty ("border", "7px solid #990099", "important");
    
  • 该页面包含修改或重新加载目标图像的JS。。。在适当的情况下拦截、阻止或清理此类JS


  • 如果
    showDialog()是否始终正确发射,这是另一种情况,但您指出情况并非如此

    如果发生了其他事情,我们不能不看到目标页面,也许还有整个GM脚本就知道。链接到它们。

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

    其他一些可能导致故障的因素:

  • 其他一些CSS正在覆盖
    markImage()
    中的CSS。将代码更改为:

    img.style.setProperty ("border", "7px solid #990099", "important");
    
  • 该页面包含修改或重新加载目标图像的JS。。。在适当的情况下拦截、阻止或清理此类JS


  • 如果
    showDialog()是否始终正确发射,这是另一种情况,但您指出情况并非如此


    如果发生了其他事情,我们不能不看到目标页面,也许还有整个GM脚本就知道。链接到这些对话框。

    你说对话框总是正确显示,但边框并不总是粘在一起?没错,这就是我不知道的原因。我还试图检查代码的另一部分的高度,一旦图像已经加载,然后调用markImage,这解决了一个问题,但我也想知道为什么上面的代码不起作用。你说对话框总是正确显示,但边框不总是粘住?正是因为如此,我没有线索。我还尝试检查代码其他部分的高度,一旦图像已经加载,然后调用markImage,这解决了一个问题,但我也想知道为什么上面的代码不起作用。你的第一个建议-添加“重要”-成功了!再次,非常感谢!你的第一个建议——加上“重要”——成功了!再次,非常感谢!