无法设置属性的价值< innerHTML':时间问题?

时间:2014-12-11 19:05:42

标签: javascript iframe innerhtml timing

其他人遇到了类似的错误,通常是因为他们试图在网页完全加载之前访问DOM对象。我正在做一些不同的事情,但我也可能有时间问题。

我有一个Javascript应用程序,它使用表单和iframe与CGI脚本进行通信。用户第一次单击提交按钮时,JS应用程序会创建一个不可见的iframe,并将表单的数据发送到服务器。服务器应该通过将数据发送到JS应用程序读取和解释的iframe来响应。

以下是代码的简化版本:

var iframe = document.createElement("iframe");
iframe.name = "myIframe";
document.body.appendChild(iframe);
var iframeDocument = 'contentDocument' in iframe? iframe.contentDocument : iframe.contentWindow.document;
iframeDocument.body.innerHTML = "";

完整错误是:TypeError:无法设置属性'innerHTML'的值:object为null或undefined

很久以前加载的整个页面 - 当上面的代码执行时,用户输入了一些数据并点击了提交按钮。但是,iframe是新的。

代码在我的计算机上正常工作 - 我无法重现问题。我可以从服务器上的日志文件中看到用户代理是'Mozilla / 5.0(兼容; MSIE 9.0; Windows NT 6.1; Trident / 5.0)'。

也许天真,我认为iframe已经创建,我可以设置其文档的innerHTML属性。这可能是一个时间问题吗?我是否必须在设置innerHTML之前等待,或者出现其他问题?

如果错误确实是由计时问题引起的,我可以通过在页面首次加载时创建iframe来修复它。如果用户点击取消按钮,则永远不会使用iframe - 我认为最好只在需要时创建iframe。要真正解决这个错误,我必须理解它 - 这就是我提出问题的原因。

1 个答案:

答案 0 :(得分:1)

也许这是一个时间问题,你可以尝试:

var iframe = document.createElement("iframe"),
    iframeDocument;
iframe.name = "myIframe";

iframe.onload = function(){
    iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
    iframeDocument.body.innerHTML = "";
};

document.body.appendChild(iframe);    

这样你就可以确保你的iframe准备好了