相关疑难解决方法(0)

是否应立即将图像src设置为数据URL?

考虑以下(脆弱的)JavaScript代码:

var img = new Image;
img.src = "data:image/png;base64,..."; // Assume valid data

// Danger(?) Attempting to use image immediately after setting src
console.log( img.width, img.height );
someCanvasContext.drawImage( img, 0, 0 );

// Danger(?) Setting onload after setting src
img.onload = function(){ console.log('I ran!'); };
Run Code Online (Sandbox Code Playgroud)

问题

  • 图像宽度和高度应该立即正确吗?
  • 画布应该立即开始工作吗?
  • 是否应该onload调用回调(在src更改后设置)?

实验测试
我创建了一个具有类似代码的简单测试页面.在Safari我的第一次测试,都是由本地打开HTML网页(file:///URL),并从我的服务器加载它,结果显示一切工作:高度和宽度是正确的,在画布上绘制的作品,并且onload还火.

在Firefox v3.6(OS X)中,启动浏览器后加载页面显示设置后高度/宽度不正确,drawImage()失败.(然而,onload处理程序会触发.)然而,再次加载页面会在设置和drawImage()工作后立即显示宽度/高度.Firefox似乎将数据URL的内容缓存为图像,并在同一会话中使用时立即可用.

在Chrome v8(OS X)中,我看到与Firefox相同的结果:图像不能立即使用,但需要一些时间从数据URL异步"加载".

除了实验证明上述哪些浏览器有效或无效之外,我真的很喜欢这些应该如何表现的规范的链接.到目前为止,我的Google-fu还没有完成任务.

安全玩耍
对于那些不明白为什么上面可能有危险的人,要知道你应该使用这样的图像是安全的:

// First create/find the …
Run Code Online (Sandbox Code Playgroud)

html javascript image data-uri

71
推荐指数
2
解决办法
4万
查看次数

Chrome缓存CSS但不在CSS文件中加载图片

我们在工作中遇到一个奇怪的问题,只发生在chrome中.看起来css文件正在缓存,并且不会重新下载此文件的内容.

问题是当使用新会话例如"私人会话"时,不会显示图像"mainSprite.png".

经过一些测试后,我认为如果用户未经过身份验证,问题与我们在开始时进行重定向有关.根据我的理解,它可能无法完成在css文件中链接的精灵的下载.它会尽快缓存无效对象作为重定向开始,然后在下面的页面时,将无法显示正确的图像,因为它的缓存有些不妥.

奇怪的是它实际上在某个时刻完全加载了图像.但它看起来并没有在内存中刷新它......

在第一次加载开始重定向并正确显示图像之前,我做了一秒的超时.这是一个快速修复,我不能指望每台计算机在1秒钟内加载css中包含的每个图像.

编辑

据我所知,它看起来真的像竞争条件.我改变了加载顺序.我们使用require.js.我没有在css之后加载js,而是在之前启动js加载.现在,我的本地服务器上的图像正确加载.

如果有人有兴趣研究它:

http://api.checklist.com

编辑2

当图像不可见时,打开新标签会出现同样的问题.关闭浏览器并重新打开它将在首次加载时工作,图像不会被下载,而是从Cache加载,这意味着在关闭浏览器之前,图像确实已下载.

css caching google-chrome

18
推荐指数
1
解决办法
4213
查看次数

每10秒更改一次图像(作为背景)

HTML

<div id="background">
     <img src="#" alt="Background Image" class="first"/>
     <img src="#" alt="Background Image" class="second"/>
</div>
Run Code Online (Sandbox Code Playgroud)

我没有添加SRC,因为它会减少我的页面的加载时间.(演示)

JQuery的

        var current = "first";
        window.setInterval(function() {
            if(current == "first") {
                $("#background .second").prop("src", getMessage());
                setTimeout(function(){
                    $("#background .second").animate({
                        opacity: 1
                    }, 1000);
                    $("#background .first").animate({
                        opacity: 0
                    }, 1000);
                },1000);
                current = "second";
            } else if (current == "second") {
                $("#background .first").prop("src", getMessage());
                setTimeout(function(){
                    $("#background .first").animate({
                        opacity: 1
                    }, 1000);
                    $("#background .second").animate({
                        opacity: 0
                    }, 1000);
                },1000);
                current = "first";
            }
            getMessage()
        }, 5000);
Run Code Online (Sandbox Code Playgroud)

所以我有一个带有src链接到我的图像的数组,这些数据是随机选择的function …

html javascript css jquery

3
推荐指数
1
解决办法
2421
查看次数

强制某些JS文件和图像在包括JS文件在内的任何其他内容之前加载

因为我的客户端页面有大量的Javascript,我在移动版本顶部添加的图像轮播需要永远在智能手机上呈现.我想加载轮播图像然后转盘所需的文件(jQuery,carousel JS文件,carousell CSS文件)之前的任何其他包括JS,CSS等.

是否有可能,如果可以的话怎么做?

javascript load image

2
推荐指数
1
解决办法
1026
查看次数

标签 统计

javascript ×3

css ×2

html ×2

image ×2

caching ×1

data-uri ×1

google-chrome ×1

jquery ×1

load ×1