0

基本上我有一个包含 javascript 文件的空白 html 页面,在 javascript 文件中我有这个:

function doIt() {
 document.writeln("asdf");
}

// could also be setTimeout
setInterval("doIt()", 5000);

当 html 页面加载时,它会等待 5 秒,然后每 5 秒将“asdf”输出到屏幕上。如果我点击刷新或 f5,什么都不会发生。当我查看源代码时,页面是空白的。有什么理由为什么当我查看源代码时我什至看不到:

<script type="text/javascript" src="test.js"></script>

在html页面上?我假设由于空白源而无法刷新页面。有什么办法可以解决这个问题?

谢谢!

4

4 回答 4

1

当 html 页面加载时,它会等待 5 秒,然后每 5 秒将“asdf”输出到屏幕上。

页面加载完成后,文档将关闭且无法写入。因此,如果您document.write()在此之后调用,则假定您的意思是调用document.open()完全替换 page。旧文档被卸载替换为您要编写的新文档,这就是您无法再查看旧页面源的原因。

并且因为您不调用document.close(),所以 throbber 将继续旋转,等待新文档完成(这永远不会发生)。

正如 SLaks 所说,您应该与 DOM 进行交互,而不是使用document.write()通常最好避免的方式(除了在少数特定情况下将初始文档写入弹出窗口或 iframe)。

于 2010-10-28T12:28:58.587 回答
1

document.write页面加载完成后,您不能这样使用。

相反,您应该附加到 DOM 元素的文本。

于 2010-10-28T12:16:04.427 回答
0

多谢你们。我能够看到你们在页面加载后必须修改 DOM 以添加 javascript 的意思。我能够做到这一点,但遇到了同样的问题:

基本上我需要使用 setInterval 进行一些轮询以等待数据从父级发送到这个 iframe,一旦它接收到数据,它就会输出一些 javascript(我在 DOM 中创建了一个新的脚本元素)。但问题是该元素的 src 指向一个外部 url,我从中获取一些数据,而外部源返回数据的方式是使用 document.write - 我无法控制。

除了使用 setInterval 之外,还有其他选项可以进行轮询吗?我想继续轮询直到最大超时,然后如果达到最大超时,然后执行页面的其余部分,那么我不必担心来自外部源的 document.write 问题。

是对外部源进行调用并解析响应并使用我的 javascript 创建 dom 元素的另一种选择吗?

于 2010-10-28T13:32:14.667 回答
0

只是一个想法,没有机会测试它。

让您的脚本创建空白窗口并将脚本注入其中以调用外部脚本:

var oWindow = window.open("about:blank", "dummy", "width=0,height=0");
oWindow.document.write("<html>");
oWindow.document.write("<body>");
oWindow.document.write("<" + "script" + " type=\"text/javascript\" src=\"external.js\"></" + "script>");
oWindow.document.write("</body>");
oWindow.document.write("</html>");
oWindow.document.close();

然后阅读 oWindow.document.body.innerHTML 以查看外部脚本的“输出”。

于 2010-10-28T13:55:11.833 回答