javascript - 对象标签的数据属性是否有错误事件?

标签 javascript html svg

我有一个存储在 s3 存储桶中的 svg,我正在使用 object 标签将它嵌入到 html 页面中,如下所示:

<object type="image/svg+xml" data="url-to-svg-source" id="graph"></object>

有时,当浏览器尝试从 url 加载数据时,它会收到 403。我想注意到这个错误,如果发生这种情况,请尝试重新加载/重新渲染 svg 源,但我不知道如何注意到这个错误。必须有一种方法可以捕获我在 devtools 的 js 控制台中看到的错误。我试过注册一个事件监听器“onerror”,但它似乎没有被触发。也许只是在我的听众注册之前发生了错误?或者也许我在错误的对象上注册了它?

我试过在error 上注册一个监听器,就像这样

document
  .getElementById("graph")
  .addEventListener(
    "error", 
    function(){ console.log("on error") })

然后我像这样从S3触发了一个错误

$("#graph").attr("data", badurl)

但我没有看到我的错误监听器触发..

最佳答案

好的,所以我一直在深入研究这个问题,在我看来,浏览器在如何为 object 实现这部分 HTML 规范方面并不一致,我认为这相当于浏览器中的错误,我没有看到一致触发的错误事件。

根据HTML5 specification ,如果存在数据属性,则浏览器应该执行几个步骤来加载资源,如果存在,浏览器应该“触发一个名为 error 的简单事件”的几个点负载失败。例如,如果它无法解析 URL,如果它无法获取资源,如果它收到 404 等等。但是,似乎不同的浏览器在实现此规范的方式上并不一致。

如果我将此 html 保存在本地并在 Chrome、Safari 和 Firefox 中加载它,我会看到 3 个不同的结果。

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>test object svg reload</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  </head>
  <body>
    <div class="panel">
      <div class="main">
        <div>This object has valid data and loads a bee logo</div>
        <object type="image/svg+xml"
                data="https://www.beeminder.com/legacy_images/infinibee.svg"
                id="beelogo"
                onload="console.log('loaded bee logo')"
                onerror="console.log('error loading bee logo')">
          <h2 id="fallback">This is the fallback</h2>
        </object>
      </div>
      <div class="main">
        <div>This object will get a 404 when trying to load its data</div>
        <object type="image/svg+xml"
                data= "https://beeminder-dev.s3-us-west-2.amazonaws.com/not-a-valid-file-name.svg"
                id="missinglogo"
                onload="console.log('loaded missing logo')"
                onerror="console.log('error loading missing logo')">
          <h2 id="fallback">This is the fallback</h2>
        </object>
      </div>
    </div>
  </body>
</html>

在 Chrome 中,两个 onload 事件都被触发,我在控制台中看到“loaded bee logo”,然后是“loaded missing logo”。

在 Safari 中,我只看到“加载的蜜蜂 Logo ”打印到控制台。

在 Firefox 中,我看到“加载缺少 Logo 时出错”,然后在控制台中打印“加载蜜蜂 Logo ”。

关于javascript - 对象标签的数据属性是否有错误事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55176323/

相关文章:

javascript - 过滤搜索 <ul>

javascript - 复选框检查全部无法正常工作

html - 在 Wordpress 上的图像上创建悬停后图像不会调整大小

html - 如何使用 Flexbox 将 4 张图像分成 2x2 网格?

javascript - 为什么 SVG 图像会在同一个 div 中加载重定向?

svg - 在另一个形状内创建一个形状

svg - 有没有SVG动画工具?

javascript - 使用 SimpleDateFormat 设置日期格式

javascript - 从 Android 中执行 HTML 文件中的 Javascript

javascript - 如何在 webgl 中从前/左/上向量创建投影矩阵