Javascript Chrome不更新对象标记的数据属性
我想动态更改“object”标记的“data”属性,但这在Chrome 48中不起作用:在控制台中,我可以看到属性值已正确更新,但始终显示第一个动画。我错过什么了吗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)
<!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所说,您将失去直接连接到元素的所有事件侦听器。