Chrome 31 的一个 Bug(已修复)

2071次阅读  |  发布于5年以前

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