Chrome不会更新对象标记的数据属性

时间:2016-02-23 10:01:21

标签: javascript google-chrome

我想动态更改数据'对象的属性'标签,但这在Chrome 48中不起作用:在控制台中,我可以看到属性值已正确更新,但始终显示第一个动画。我错过了什么吗?

<!doctype html>
<html>
    <head>
        <script type="text/javascript">
            window.addEventListener("load", function (event)
            {
                setTimeout(function ()
                {
                    console.log("change")
                    document.getElementById("flash").data = "http://edmullen.net/flash/BBC2.swf"
                }, 2000)
            })
        </script>
    </head>
    <body>
        <object id="flash" type="application/x-shockwave-flash" data="http://edmullen.net/flash/BBC2.swf"></object>
    </body>
</html>

3 个答案:

答案 0 :(得分:1)

试试这个:

var element = document.getElementById("flash");
element.setAttribute("data", "anim2.swf"); 

这显然是一种替代方案,但您的代码应该按原样运行?无论如何尝试这个,让我知道它是怎么回事......如果它不起作用,那么检查你的控制台是否有错误。

答案 1 :(得分:0)

我记得在旧的IE中已经存在问题了......通过脚本动态更改object属性并没有让显示的闪存发生变化。

如果可以,您可以用新的对象元素替换整个对象元素。 (如果你能意味着如果没有别的东西阻止你这样做,就像任何绑定到元素本身的事件处理程序一样,那些就会丢失。但是这可以通过使用事件委托来解决将事件处理程序直接绑定到元素。)

可以f.e.只需通过再次将outerHTML元素分配给自身来完成,在更改数据属性后,请参阅kaiido的plnkr的修改版本,http://plnkr.co/edit/wIFUdI8c29awFujkIkGf?p=preview

答案 2 :(得分:0)

我能够使用Chrome 48和Shockwave Flash插件r20在我的mac os X mavericks上重现它。 r0。

可在此处找到一个工作示例:http://plnkr.co/edit/0K2SHlcp0dVvDnBKMuL0?p=preview

您可能想要填写错误报告给Chrome,Canary 50也很关注。 它似乎与webkit与<object>元素的一些缓存问题有关。

我没有找到真正的修复,即使在更改data属性之前将数据设置为“”也不起作用。

我能想到的唯一解决方法是替换你的元素:

var obj = document.getElementById('flash');
obj.data = "newUrl.swf";
obj.parentNode.replaceChild(obj.cloneNode(true), obj);