window.onload在iframe内调用了两次

And*_*dez 2 html javascript iframe

我在iframe上测试事件,我遇到了一些非常奇怪的事情.我已经四处寻找同样问题的其他人,但没有找到具有这些特征的人.

我有一个包含iframe的页面:

<!-- index.html -->
<body>
    <h1>Parent</h1>
    <h4><a href="index2.html">...go to the 2nd page...</a></h4>
    <iframe src="iframe.html"></iframe> 

    <script type="text/javascript">
        window.addEventListener('load', function(){
            console.log('parent loaded');
        });
    </script>

</body>
Run Code Online (Sandbox Code Playgroud)

和iframe:

<body>
    <h1>Iframe</h1>
    <script type="text/javascript">
        var i = 0;
        window.addEventListener('load', function(){
            window.top.console.log('iframe loaded', i++);
            document.body.innerHTML += '<h3>loaded</h3>';
        });
    </script>
</body>
Run Code Online (Sandbox Code Playgroud)

当我加载页面时,iframe上的onload事件运行两次,甚至更奇怪,看起来iframe本身被加载两次,因为<h3>loaded</h3>控制台看起来像这样的元素(变量i是两次'0'):

iframe loaded 0     iframe.html:11
parent loaded       (index):13
iframe loaded 0     iframe.html:11
Run Code Online (Sandbox Code Playgroud)

要添加到怪异,如果我没有在父文件上附加onload事件,iframe的onload只能运行一次.

如果您想在不受干扰的情况下运行它,请访问http://sureshots.andrepadez.com/iframetest/

我需要知道我做错了什么,或者这是一个已知的问题,我该如何解决它.

Joh*_*ing 8

修改body.innerHTML属性时,会导致重新考虑整个body元素.iframe元素有效地从DOM中删除并再次插入,导致它加载两次.

违规行:

document.body.innerHTML += '<h3>loaded</h3>';
Run Code Online (Sandbox Code Playgroud)