使用以下代码,我得到图像的大小:
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 来改变样式,但没有区别。所以我不知道为什么这会“随机”失败。
提前感谢您的帮助。
答案 0 :(得分:1)
好的,如果showDialog();
始终正确触发,则会排除图像加载和渲染延迟。
可能导致故障的其他一些事情:
其他一些CSS正在覆盖markImage()
中的CSS。将代码更改为:
img.style.setProperty ("border", "7px solid #990099", "important");
该页面包含修改或重新加载目标图像的JS ......在适当的JS之后拦截,阻止或清理。
如果showDialog();
不总是正确触发,那就是一个不同的球赛,但你表示情况并非如此。
如果还有其他事情发生,我们无法看到目标页面和整个GM脚本。链接到那些。