我正在寻找一种使用 javascript 取消图像加载的方法。我已经查看了其他问题,但隐藏它们是不够的。此外,必须加载页面的其余部分(window.stop() 是不可能的)。
正在加载的页面不在我的控制之下,只有一件事可以保证 -<script>
页面上的第一个是我的 javascript(轻量级 - 没有 jquery)。
我尝试将所有 img 源设置为空,这没有帮助,因为 dom 是在页面解析后创建的,并且所有浏览器都具有相同的行为 - img 在解析后被加载。
我正在寻找一种使用 javascript 取消图像加载的方法。我已经查看了其他问题,但隐藏它们是不够的。此外,必须加载页面的其余部分(window.stop() 是不可能的)。
正在加载的页面不在我的控制之下,只有一件事可以保证 -<script>
页面上的第一个是我的 javascript(轻量级 - 没有 jquery)。
我尝试将所有 img 源设置为空,这没有帮助,因为 dom 是在页面解析后创建的,并且所有浏览器都具有相同的行为 - img 在解析后被加载。
现代浏览器不可能。即使您使用 JavaScript 浏览器更改图像标签的 src 属性,仍然坚持加载图像。我通过开发延迟加载插件知道这一点。
我可以看到停止图像加载的唯一方法是src
图像本身不存在属性,并使用自定义data-*
属性来保存图像的位置:
<img data-src="http://path.to/image.png" />
显然,对于那些(诚然很少见的)禁用 JavaScript 的浏览器,这不会优雅地降级,因此需要一个noscript
后备:
<img data-src="http://path.to/image.png" />
<noscript><img src="http://path.to/image.png" /></noscript>
再加上一个简单的功能,在您或您的用户准备好时加载图像:
/* simple demo */
function imagePopulate(within, attr) {
within = within && within.nodeType == 1 ? within : document;
attr = attr || 'data-src';
var images = within.getElementsByTagName('img');
for (var i = 0, len = images.length; i < len; i++) {
if (images[i].parentNode.tagName.toLowerCase() !== 'noscript') {
images[i].src = images[i].getAttribute(attr);
}
}
}
document.getElementById('addImages').onclick = function(){
imagePopulate();
};
我不能确定是否适用于所有浏览器,但这似乎在 Chrome 中有效(因为没有尝试通过查看开发人员工具的网络选项卡来加载noscript
-contained img
)。
它可以通过网络工作者来完成。请参阅以下示例: https ://github.com/NathanWalker/ng2-image-lazy-load 。
停止网络工作者会取消浏览器中的图像加载
回顾onload 事件:
window.onload=function(){
imgs = document.getElementsByTagName('img');
for(i = 0; i < imgs.length(); i++){
imgs[i].src = '#';
}
};
你需要一个代理。
您的脚本可以使用类似的东西重定向到另一台服务器
location.replace('http://yourserver.com/rewrite/php?url='+escape(this.href));
也许您告诉我们为什么要取消图像加载以及您正在加载的网站,以便我们提出更好的解决方案
如果页面上除了图片什么都没有,你可以试试
document.write('<base href="http://yourserver.com/" />');
这将与页面上的所有非绝对 src 和 href 混淆。
更新可怕的黑客,但也许这个几乎是伪代码(我要睡觉了)会做一些事情
document.write('<script src="jquery.js"></script><div id="myDiv"></div><!-'+'-');
$(function() {
$.get(location.href,function(data) {
$("#myDiv").html(data.replace(/src=/g,'xsrc='));
});
})
如果您只想取消图像的加载,您可以使用 sємsєм 的解决方案,但我认为使用窗口 onload 事件不会起作用。
您可能需要提供一个按钮来取消图像加载。我也建议,而不是将 src 属性设置为 "#" ,您可以使用removeAttribute()删除 src 属性本身
[确保在测试时禁用缓存]
最接近您可能想要的内容是拥有一个快速加载的占位符图像(即图像的低分辨率版本)和一个隐藏图像(例如 {display:none}),其中大图像被加载但不显示。然后在大图像的 onload 事件中交换图像(例如 display:block 用于大图像 display:none 用于较小的图像)。我还使用一个数组(带有它们的 url)来重用任何已经打开的图像。
顺便说一句,如果您在关闭时在新网页中打开图像,则图像加载将被取消。因此,也许您可以使用 iframe 在网页中执行类似的操作来显示图像。
要关闭 iframe 并因此卸载图像,请从 DOM 中删除框架
(另一个优点是浏览器会产生另一个进程来处理 iframe,因此在加载图像时页面不会锁定)