是否可以在图像开始加载之前运行javascript?
我想在浏览器请求之前更改图像的src属性,目的是使用像Timthumb这样的PHP脚本来减小图像的大小。 使用jQuery,我认为$(document).ready
会做到这一点:
$(document).ready(function () { var imgs = $('#container img'); jQuery.each(imgs, function() { $(this).replaceWith(''); }); });
但原始的,未显示的图像仍然在后台下载到浏览器的缓存中。 是否有可能在客户端做我想做的事情,或者服务器端是唯一的选择?
浏览器序列化Javascript加载和执行(除非你使用head.js
类的head.js
),但问题是DOM必须可用于脚本来修改它。 在DOM可用之后 ,jQuery ready事件将触发,因此浏览器已经开始请求HTML中引用的资源。
因此,如果您将Javascript放在图像标记之前,它将无法找到图像标记,并且一旦准备就绪,则下载已经开始。 我不知道在图像加载之前会发生任何事件(只有一个用于中止),因此最干净的方法是首先使用修改后的src
属性创建HTML。
或者,将src
放在图像上的不同属性中(如data_orig_src
)并运行脚本,在文档就绪时将src
设置为每个图像上的data_orig_src
。 在更改src
之前使用CSS隐藏图像,以便用户看不到损坏的图像图标。 我认为这可能比在事后添加图像更好,因为您不需要跟踪图像需要放在DOM中的位置,它也应该表现得更好。
当然,如果您可以将服务器更改为使用data_orig_src
而不是src
,那么为什么不首先将正确的src
放在标签中…
在加载DOM之前,您无法更改页面的DOM。 并且,一旦加载了DOM,浏览器就已经开始请求图像了。 因此,您无法在开始加载图像之前更改标记。
您可以做的是将页面源更改为不想在页面源中更改任何图像,然后使用javascript在页面加载后动态插入所需图像。 这样浏览器永远不会请求错误的图像。
或者,您可以将标记更改为根本没有
.src
属性,并使用您的Javascript添加.src
属性。 在您为其提供.src
属性之前,不会显示没有.src
属性的标记。
如果您在将图像更改为正确的图像之前担心错误的图像在加载时会闪烁,您可以在样式表中使用CSS来隐藏图像,然后在将img.src
更改为正确的值之后新的.src
值已加载,您可以使它们可见。
如果你无法改变页面的来源,那么你所能做的就是最初隐藏图像(使用CSS),直到在它们上面设置了正确的.src
并且加载了新的.src
值。
这有点可能,但不是你现在拥有或者可能想要的方式,它不会优雅地降级,但你可以从你的html中取出图像并使用jQuery将它插入你的html并应用你想要的任何改变。
例:
var image = $('').attr('src', 'imageURL.jpg'); image.appendTo('domElement');
但是这样做对我来说没有任何意义,为什么你不会只是编辑图像源。