其他人遇到了类似的错误,通常是因为他们试图在网页完全加载之前访问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。要真正解决这个错误,我必须理解它 - 这就是我提出问题的原因。
答案 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准备好了