Javascript 在加载图像时替换图像
所以我想制作一个简单的脚本来替换网站上的图片(当然是小猫图片)。问题是,我希望脚本在我滚动浏览站点时不断替换图像 例如,在谷歌图片上,它只会加载立即加载图片的小猫图片,而不会加载之后加载的其他图片 如何使图像替换新加载的图像?我曾经考虑过检测内容负载,但不知道如何处理这个问题,因为我对网络上的一切都是新手 以下是我的content.js代码:Javascript 在加载图像时替换图像,javascript,web,Javascript,Web,所以我想制作一个简单的脚本来替换网站上的图片(当然是小猫图片)。问题是,我希望脚本在我滚动浏览站点时不断替换图像 例如,在谷歌图片上,它只会加载立即加载图片的小猫图片,而不会加载之后加载的其他图片 如何使图像替换新加载的图像?我曾经考虑过检测内容负载,但不知道如何处理这个问题,因为我对网络上的一切都是新手 以下是我的content.js代码: if(document.readyState=='loading'){ 文档。addEventListener('DOMContentLoaded',替换
if(document.readyState=='loading'){
文档。addEventListener('DOMContentLoaded',替换);
}否则{
替换();
}
函数替换(){
让文件名=[
“0.jpg”,
“1.jpg”,
“2.jpg”,
“3.jpg”,
“4.jpg”,
“5.jpg”,
“6.jpg”,
“7.jpg”,
“8.jpg”,
“9.jpg”,
“10.jpg”
];
让imgs=document.getElementsByTagName('img');
用于(imgs的图像){
让ran=Math.floor(Math.random()*10);
console.log(ran);
让file='cat/'+文件名[ran];
让url=chrome.extension.getURL(文件);
image.src=url;
}
}
您可能希望查看MutationObserver对象。()
基本上,我们可以做的是,当页面修改满足一系列条件时,要求文档主体引发一个事件。在您的情况下,您希望观察子树的修改,以便在每次向页面添加更多内容时都能收到通知,然后可以查看和修改它
由于您的代码可以在一个页面上运行多次,因此您遇到了一个难题。如何处理已更改的图像?他们应该再次改变还是保留他们的新形象?我已经使用.dataset
api()设置了一个标志,指示图像已经更改,应该在后续执行时忽略
这里有一个粗略的例子,可以让您开始学习。可以在浏览器的元素检查器中删除水平规则元素以触发该行为
<!doctype html>
<html>
<head>
<script>
"use strict";
window.addEventListener('load', onWindowLoaded, false);
function onWindowLoaded(evt)
{
const targetNode = document.body;
const config = {attributes:true, childList:true, subtree: true};
const observer = new MutationObserver(callbackFunc);
observer.observe(targetNode, config);
function callbackFunc(mutationsList, observer)
{
for (const mutation of mutationsList)
{
if (mutation.type == 'childList')
updateImageSources();
}
}
}
function updateImageSources()
{
let allImages = document.querySelectorAll('img');
allImages.forEach( imgFunc );
function imgFunc(img, index, collection)
{
let filenames = ['0.jpg', '1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg',
'6.jpg', '7.jpg', '8.jpg', '9.jpg', '10.jpg'];
if (img.dataset.replaced == undefined)
{
img.dataset.replaced = true;
let randomIndex = Math.floor( filenames.length * Math.random() );
img.src = filenames[randomIndex];
}
}
}
</script>
</head>
<body>
<img><img><img>
<hr>
</body>
</html>
“严格使用”;
addEventListener('load',onWindowLoaded,false);
函数onWindowLoaded(evt)
{
const targetNode=document.body;
const config={attributes:true,childList:true,subtree:true};
const observer=新的变异观察者(callbackFunc);
observer.observe(targetNode,config);
函数callbackFunc(mutationsList,observer)
{
for(突变列表的常数突变)
{
if(mutation.type=='childList')
updateImageSources();
}
}
}
函数updateImageSources()
{
让allImages=document.queryselectoral('img');
所有图像。forEach(imgFunc);
函数imgFunc(img、索引、集合)
{
让文件名=['0.jpg','1.jpg','2.jpg','3.jpg','4.jpg','5.jpg',
"6.jpg,"7.jpg,"8.jpg,"9.jpg,"10.jpg";;
if(img.dataset.replaced==未定义)
{
img.dataset.replaced=true;
让randomIndex=Math.floor(filenames.length*Math.random());
img.src=文件名[随机索引];
}
}
}
您可能希望使用setTimeout()
和clearTimeout()
函数在更改图像之前延迟多少秒。我有一个答案。这是一个我每10秒重新加载一次图片的网站。如果你认为有帮助的话,我会在下面发布代码:。@holdoffuinger,那就是每n秒替换一次图像,对吗?我想做的是在新图像加载到页面时不断替换图像。这真的很有帮助。非常感谢。