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

Javascript Chrome不更新对象标记的数据属性,javascript,google-chrome,Javascript,Google Chrome,我想动态更改“object”标记的“data”属性,但这在Chrome 48中不起作用:在控制台中,我可以看到属性值已正确更新,但始终显示第一个动画。我错过什么了吗 <!doctype html> <html> <head> <script type="text/javascript"> window.addEventListener("load", function (event)

我想动态更改“object”标记的“data”属性,但这在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>

addEventListener(“加载”),函数(事件)
{
setTimeout(函数()
{
控制台日志(“更改”)
document.getElementById(“flash”).data=”http://edmullen.net/flash/BBC2.swf"
}, 2000)
})
试试这个:

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

这显然是另一种选择,但您的代码应该按原样工作吗?无论如何,试试这个,让我知道它是如何运行的……如果它不工作,请检查您的控制台是否有错误。

我记得这在旧版IE中已经有问题了……通过脚本动态更改
对象
属性并不会使显示的闪存发生更改

如果可以,您可以用一个新的对象元素替换整个对象元素。(如果可以的话,这意味着如果没有任何其他因素阻止您这样做,比如绑定到元素本身的任何事件处理程序,那么这些都会丢失。但是可以通过使用事件委派来解决,而不是直接将事件处理程序绑定到元素。)


例如,可以简单地将元素的
outerHTML
重新分配给自身,在数据属性更改后,请参见Kaido的plnkr的修改版本,

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

可在此处找到一个工作示例:

你可能想向chrome填写一份bug报告,金丝雀50也很关心。 这似乎与webkit与
元素的某些缓存问题有关

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

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

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

我已经在Chrome48中测试了你的代码,效果很好..对我来说也很好..可以在osX mavericks上重新编程,Chrome48:swf动画中有一个帧下降,但不会更改为其他动画@ZakariaAcharki,你测试了哪个配置?您可以看到数据属性发生了变化。请提供一个示例,一个JSFIDLE或其他东西。@ZakariaAcharki-不应该,但它是一个替代方案。不妨试一试,如果它不起作用,那么一定有未知的错误?那么,当代码起作用时,也许应该把问题记下来@ZakariaAcharkiI可以重新编程,但setAttribute也不起作用。。。请注意,chrome与HTMLObjectElement可能相关……嗯,很有趣。很有可能是@kaiDo尝试使用setAttribute()的问题,但仍然不起作用。请注意,正如CBroe所说,您将失去直接连接到元素的所有事件侦听器。