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="https://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="https://st.imququ.com/static/uploads/2011/07/ququ_1_1_1.jpg" />
<script>
setTimeout(function() {
alert(0);
}, 0);
</script>
这个问题还是比较严重的,我也会向社区反馈。大家有什么看法,欢迎留言讨论。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8