首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当<object>标签的数据属性在Chrome中更改时,不会刷新

当<object>标签的数据属性在Chrome中更改时,不会刷新
EN

Stack Overflow用户
提问于 2012-04-29 03:35:35
回答 3查看 21.2K关注 0票数 6

我在一个网页上有一个<object>标记,它的data属性在JS (特别是jQuery)中以编程方式更改。SVG标记总是指向data图像。

在Firefox中,当data标记发生变化时,新的SVG会加载,所有正确的事件都会触发。在Chrome中,只有在单击SVG画布时才会发生这种情况--一旦发生这种情况,新的SVG就会显示并触发所有与其相关的事件。

为什么会这样呢?当我改变其data属性时,如何强制Chrome刷新<object>

EN

Stack Overflow用户

发布于 2012-04-30 06:03:47

嗯,我今晚真的很无聊,我想做一些课外作业以外的事情,所以我为你挖掘了很多规范和论坛。

HTML4 spec似乎没有提到SVG,所以这是个死胡同。HTML5 Spec Working Draft告诉我们,我们可以使用data来调用插件和加载内容。HTML5 Spec Editor's Draft做了mention SVG,告诉我们SVG属于embedded content类别。

由于<object> <object>元素添加了额外的细节(如 中所定义),因此我们可以说加载E122元素的行为不是可接受的标准。(如果我说错了,有人请纠正我。)

无论如何,在<object>规范中,除了所有关于浏览器应该如何通过MIME类型等解释对象的常用技术术语之外……我们找到与这个问题相关的部分:

DNS4.6:如果加载错误失败(例如,有一个HTTP404错误,有一个

错误),在元素上触发一个名为 error 简单事件,然后跳到整个步骤集中的最后一步(回退)。

..。

10.:一旦资源完全加载了,将一个任务排入队列,以便在元素上触发一个名为的简单事件

(仅仅意味着事件不会冒泡(因此我们不能在任何父元素中侦听它),并且不能取消,并使用Event接口)

因此,看到这里,我认为如果我从DOM中选择<object>元素,它应该有一个onload和onerror事件,如果没有object.addEventListener的话。如果你看一下SVG的Mozilla Developer Network文档,你会发现很多JavaScript文档是不完整的。真扫兴。

闲逛JSFiddle、Chrome Dev Tools和Firefox Web控制台,我发现它们都支持onload和onerror,至少我是这么认为的。

测试结果

Google Chrome (18.0.1025.165)和Firefox (12.0)

支持

fire)不支持(事件似乎不支持

正如您从fiddle中看到的,在Chrome中使用load事件会导致无限循环。它不应该这样做(根据editor's draft):

上述算法独立于CSS属性(包括“显示”、“溢出”和“可见性”)。例如,即使元素使用“display:none”CSS样式隐藏,它也会运行,并且如果元素的可见性发生变化,它也不会再次运行。

它看起来像是某个人的already filed a bug,所以如果你去确认一下这个bug,它会对Chrome开发团队有所帮助。

TL;DR

加载对象的行为还不是一个被接受的标准,但是您可以去验证一个bug in the Chromium project。您可以尝试按照@Hello71的建议进行操作,并尝试从DOM中删除该元素,然后重新添加它,但I couldn't get it to work

票数 11
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10366867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档