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

时间:2012-05-15 18:54:35

标签: javascript css greasemonkey

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

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 来改变样式,但没有区别。所以我不知道为什么这会“随机”失败。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

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

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

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


  3. 如果showDialog(); 总是正确触发,那就是一个不同的球赛,但你表示情况并非如此。

    如果还有其他事情发生,我们无法看到目标页面和整个GM脚本。链接到那些。