为什么这些代码不能在浏览器中统一工作?

时间:2013-05-07 05:34:46

标签: javascript jquery windows jsbin

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>

        <!-- JQuery code -->
        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>

        <!-- Script which refreshes each element every 5 seconds -->
        <script>
            setInterval(reloadElements, 5000);
            function reloadElements() {
                $('#refresh').load(location.href+' #refresh');
            }
        </script>
    </head>

    <body>
        <p id="refresh">
            This is some paragraph text. <br />

            <ul>
                <li> List item one. </li>
                <li> List item two. </li>
            </ul>
        </p>
    </body>
</html>

此HTML文件将始终位于客户端本地。

我编写此脚本的原因是我的页面可以自动反映对文件所做的更改(即我不需要手动刷新页面)。我有一个C ++应用程序写入此HTML文件(仅更改<p id="refresh">标记的内容。)

我的测试机器运行Windows XP 32位。

Google Chrome上的行为,版本26.0.1410.64 m:

当我使用--allow-file-access-from-files参数运行Chrome并且没有任何命令行参数并使用文本编辑器修改.html文件时,更改未显示在浏览器上。

Internet Explorer上的行为,版本8.0.6001.18702,Mozilla Firefox,版本20.0.1:

仅修改段落文本(即反映更改)。修改列表元素或在列表后添加任何内容都不会反映出来。

JS Bin上的行为:

正如预期的那样,在打开网页并使用文本编辑器修改.html文件后,当5秒间隔到期时,更改会反映在浏览器上。


我目前只需要支持Internet Explorer,Google Chrome和Mozilla Firefox。

为什么会出现这种差异?我究竟做错了什么?有没有更好的方法来实现我想要的目标?

PS:这恰好是我的第一个网页代码。


UPDATE:

由于 squint 的有用建议,我修复了Firefox和Internet Explorer问题(请参阅下面的评论)。我基本上将<p>元素的内容放在一个单独的.html文件中,并修改了JQuery加载以加载该文件。不知道这有什么不同。

1 个答案:

答案 0 :(得分:0)

我想你错过了document.ready

<script>
$(document).ready(function(){  
    setInterval(reloadElements, 5000);
    function reloadElements() {
        $('#refresh').load(location.href+' #refresh');
    }
});
</script>

document.ready确保只有在文档中的元素准备就绪后才能执行代码。