Chrome 31 的一个 Bug(已修复)

update @ 2013-11-15 22:30,Chrome 稳定版已升级到 31.0.1650.57,经验证,本文提到的 Bug 已修复。

本文提到的 Bug,是由我同事发现的,在 Chrome 正式版(31.0.1650.48)可以稳定复现,Chrome 30 和其它浏览器都没问题。大家在测试本文示例时请留意版本号,如果有和本文描述不一致的地方请给我留言。

触发条件

经过分析,如果在 Chrome 31 里用 JavaScript 立即提交表单到 iframe 中(无论 get 还是 post),都会导致后续代码停止渲染。

简单示例如下(外链地址):

text1

<iframe name="ifr"></iframe>

<form action="https://imququ.com" id="form" target="ifr"></form>
<script>
    document.getElementById("form").submit();
</script>

text2

<img src="//st.imququ.com/static/uploads/2011/07/ququ_1_1_1.jpg" />

<script>
setTimeout(function() {
    alert(0);
}, 0);
</script>

以上代码,script 标签之后的代码都不会执行。

解决方案

这个问题,暂时可以通过万能的「setTimeout 0」来解决,即把提交表单的操作放在 setTimeout 里执行(外链地址):

text1

<iframe name="ifr"></iframe>

<form action="https://imququ.com" id="form" target="ifr"></form>
<script>
setTimeout(function() {
    document.getElementById("form").submit();
}, 0);
</script>

text2

<img src="//st.imququ.com/static/uploads/2011/07/ququ_1_1_1.jpg" />

<script>
setTimeout(function() {
    alert(0);
}, 0);
</script>

结论

这个问题还是比较严重的,我也会向社区反馈。大家有什么看法,欢迎留言讨论。

本文链接:参与评论 »

--EOF--

提醒:本文最后更新于 1119 天前,文中所描述的信息可能已发生改变,请谨慎使用。

专题「浏览器」的其他文章 »

Comments