如何定时刷新当前页面的iframe?

How do I refresh an iframe of the current page with an interval?

我正在尝试使用此脚本将页面放入自身的 iframe,并每隔一段时间刷新 iframe:

document.write('<iframe id="frame" src="' + window.location.href + '"><script>setInterval(function ()/{document.getElementById("frame").contentWindow.location.reload();},10000);</script>');

它所做的只是将 '); 附加到页面末尾。

我在别人的页面上将其用作自动刷新的脚本。如果我只是刷新,间隔就被破坏了

对查询字符串的处理方式进行了一些简化,但要点在这里。

创建一个 iframe 对象,添加其属性,然后添加到 DOM,最后每隔一段时间用新的查询字符串重新加载页面

    var ifr = document.createElement('iframe');
    var props = {
        src: 'http://example.com/?r=0',
        width: 500,
        height: 300,
        style: "border:1px solid red;width:500px;height:300px;"
    }

    for (var key in props) {
        ifr.setAttribute(key, props[key]);
    }

    document.body.appendChild(ifr);

    setInterval(function(){
        var s = ifr.src.split('?r=')[0];
        ifr.setAttribute('src', s + '?r=' + parseInt( Math.random() * 1000000))
        console.log(ifr.src);
    }, 10000);

所以虽然我仍然不清楚你想解决这个问题并且你的问题也很不清楚(回想起来),但我很好奇我们如何在不创建无限循环的情况下解决这个问题。

window.top !== window.self

不会工作,因为它们是一样的,所以我认为将在原始页面上使用散列,从子页面中省略它以区分一个和它自己的克隆。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>test</title>
</head>
<body>

    <h1 id="h1"></h1>
    <script type="text/javascript">
        document.getElementById('h1').textContent =  window.location.search;
    </script>


<script type="text/javascript">

    if (window.location.hash === '#origin') {

        var ifr = document.createElement('iframe');
        var props = {
            src: window.document.location.href + '?r=0',
            width: 500,
            height: 300,
            style: "border:1px solid red;width:500px;height:300px;"
        }

        for (var key in props) {
            ifr.setAttribute(key, props[key]);
        }

        document.body.appendChild(ifr);

        setInterval(function(){
            var s = ifr.src.split('?r=')[0];
            ifr.setAttribute('src', s + '?r=' + parseInt( Math.random() * 1000000))
            console.log(ifr.src);
            // you can skip this, but it illustrates the refreshes
            document.getElementById('h1').textContent = ifr.src;
        }, 2000);
    }

</script>
</body>
</html>

你必须自己 运行 这个,代码片段不喜欢它的重定向尝试,我不能不同意......,- 注意:只有 运行 它在 Chrome, 但其他地方应该有很多不同之处

此外,为了清楚起见,如果您将其保存为 test.html,那么您应该 运行 将其保存为 path/to/your/file/test.html?r=378426#origin