我该如何处理插件中丢失的图像?

ale*_*lex 4 error-handling jquery jquery-plugins

我编写了一个名为waitForImagesjQuery插件.它基本上可以在加载图像时运行回调.

我最近收到一个功能请求,以便在下载图像时出错时以某种方式通知代码.

插件是否可以在找不到图像时调用函数?

我想添加一个额外的参数,可以检查图像是否成功下载.

image.onerror = function() {
     eachCallback.call(img.element, allImgsLoaded, allImgsLength, true);
}
Run Code Online (Sandbox Code Playgroud)

然后该人可以检查最后一个参数以查看它是否是true,如果是,则加载图像时出错.

这个想法虽然闻到了我的意思.如果我想在以后添加额外的参数怎么办?是否应该为成功和图像下载失败调用相同的回调?

然后,我想到如果找不到图像则抛出异常.

throw new Error(img.src ' + does not exist');
Run Code Online (Sandbox Code Playgroud)

然而,这并不像捕捉那样灵活,你需要像这样调用插件......

try {
   $('body').waitForImages();
} catch (exception) {
    // Which image didn't load?
    alert(exception.message);
}
Run Code Online (Sandbox Code Playgroud)

如果图像没有加载到我的插件中,最好的处理方法是什么?

Bri*_*nna 7

我会为错误条件添加一个特定的回调.

你已经拥有了这个:

$('selector').waitForImages({
    finished: function() {
        ...
    },
    each: function() {
       ...
    },
    waitForAll: true
});
Run Code Online (Sandbox Code Playgroud)

您应该考虑将其更改为:

$('selector').waitForImages({
    finished: function() {
        ...
    },
    finishedError: function() {
        ...
    },
    each: function() {
       ...
    },
    eachError: function() {
       ...
    },
    waitForAll: true
});
Run Code Online (Sandbox Code Playgroud)

你也可以使用"finishedSuccess",如果给出,只是为了保持一致.

我更喜欢这个,原因如下:

  1. 它分离出错误处理
  2. 您可以为成功或失败回调设置不同的参数集
  3. 您可以轻松地为不同的错误添加回调(对于这种情况不太可能)

请不要抛出异常.未捕获的异常将破坏JavaScript执行.可能不是因为图像没有加载而你想要做的事情.