<img>
加载错误可能有不同的原因,例如网络错误响应,错误的图像数据......
error
收到的 onerror
对象似乎没有说明具体原因。
有没有办法知道错误是由于网络错误,比如HTTP 500
还是网络超时?
修改
我不正在寻找加载资源的替代方法,例如AJAX请求。我需要专门针对<img>
标记onerror
事件的答案。原因是我使用这种方法进行像素跟踪,我需要一种方法来重试网络错误。我也没有寻找其他跟踪方法,例如JSONP。
答案 0 :(得分:4)
16Nov16 2020GMT
在电子邮件或Javascript功能有限的其他客户端中,您可能pixel-tracking。
我想到的一个想法是在<img>
的{{1}}网址中使用网址查询参数。
关于网络超时,我会提出这样的想法:用户打开电子邮件,完全加载电子邮件,然后断开与互联网的连接,不知何故,这不会给跟踪器足够的时间加载。
https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout
我建议在src
函数中使用setTimeout()
。
这将继续尝试设置/加载onerror
的{{1}}网址。您可以将成功加载到<img>
文件的网址所需的秒数附加为src
至于确定图像加载的状态src
代码,您可能需要考虑创建一个自定义?s=<sec>
错误文件,然后创建 - 例如 - 一个包含各种类型的MySQL数据库条目您有权访问的信息,如果您选择使用之前提到的查询参数,则会向错误添加更多信息。
500
500
提供有关网络的有限信息
可以在onerror
找到可从<img>
获得的信息
https://www.w3.org/TR/html/semantics-embedded-content.html#htmlimageelement-htmlimageelement
您想尝试的路线也许是使用AJAX加载图像数据并将<img>
src设置为接收到的图像数据的base64。我希望这会有所帮助。
<img>
或者使用AJAX来确定图像是否正确加载,然后使用发送到AJAX的相同URL作为14Nov16 2018GMT
的{{1}}。它当然是多余的,但可以避免长“数据”URL的问题。
src
关于网络超时,我发现这个帖子很有用JQuery Ajax - How to Detect Network Connection error when making Ajax call
显然你可以指定<img>
到AJAX,就像使用15Nov16 0832GMT
一样,除了你手动提供毫秒数。
https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
或者,如果您对能够使用error
的旧浏览器感到不满,那么您可能对Google的https://chromium.googlesource.com/chromiumos/platform/spigots/+/refs/heads/firmware-u-boot-v1/base64_encode.js
jQuery: How to get the HTTP status code from within the $.ajax.error method?
var encodedData = window.btoa("Hello, world"); // encode a string
https://tools.ietf.org/html/rfc2397#section-3
btoa()
https://tools.ietf.org/html/rfc2046#section-4.2
以这种方式使用通用图像查看应用程序 继承了支持的最危险类型的安全问题 通过申请。
https://tools.ietf.org/html/rfc2397#page-4
目前在应用程序中使用长“数据”URL的效果 未知;某些软件包可能会表现出不合理的行为 当遇到超过其分配的缓冲区大小的数据时。