我有一个书签。当它被点击时(在任何页面上):
- 它使用来自 mypage.com 的 src 插入一个脚本元素。此 src 已下载。
- src 然后:
- 插入 iframe (DOM)
- 插入一个表单 (DOM)。表单以 iframe 为目标。
- 将数据添加到表单并将其提交到 mypage.com
- mypage.com 发回响应:
<div id = "msg">Message back</div>
- 这个响应 div 被插入到 iframe 中。(在 Chrome 元素标签中验证)
- 现在我想提醒返回的 msg “Message back”。它不工作。
创建 iframe 时,我设置了它的onload
事件:
var i = document.createElement('iframe');
i.setAttribute('id', 'frame-id');
i.setAttribute('onload', 'iframeFormSubmitted();');
然后我有这个功能:
function iframeFormSubmitted(){
// in try-catch, alerting error
var iframe = document.getElementById("frame-id");
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
var msg = iframeDocument.getElementById("msg").innerHTML;
alert(msg);
}
这最终被调用了两次(我认为是第一次,因为我还将表单写入 iframe)。错误是:
cannot read property innerHTMl of null
cannot call method getElementById of undefined
编辑: contentDocument 未定义。我认为这是一个跨域的事情:一个有内容的 iFrame 怎么会有一个未定义的 contentDocument 对象?