2

我有一个书签。当它被点击时(在任何页面上):

  1. 它使用来自 mypage.com 的 src 插入一个脚本元素。此 src 已下载。
  2. src 然后:
    • 插入 iframe (DOM)
    • 插入一个表单 (DOM)。表单以 iframe 为目标。
    • 将数据添加到表单并将其提交到 mypage.com
  3. mypage.com 发回响应:<div id = "msg">Message back</div>
  4. 这个响应 div 被插入到 iframe 中。(在 Chrome 元素标签中验证)
  5. 现在我想提醒返回的 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 对象?

4

1 回答 1

2

function在您的父文档(生存的文档)中创建一个iframe,例如,done您的父文档中的函数如下所示

function done(message)
{
    // do whatever you want to do with message
    alert(message);
}

从服务器(mypage.com)发送以下代码iframe作为响应

// Call the "done" function from the iframe (the last line on the server)
echo "<script type='text/javascript'>parent.done('This is my message')</script>";

它会起作用的,我已经在我的一个项目上应用了这个,并且完美地工作。

下面给出了我的工作项目中的一些HTML片段

<form action="someAction" method="post" id="imageform" name="imageform" target="img_submit" enctype="multipart/form-data">
    <input style="display:none" type="file" name="imgfile" id="imgfile" />
    <input style="display:none" type="submit" name="subimg" value="Submit" />
</form>

iframe是隐藏的

 <iframe style="display:none" id="img_submit" name="img_submit"></iframe>`

这是我done在文档中的函数parent(在同一个文件中iframe

function done(lnk)
{
    // this is being used for afile upload (ajax simulation/fake)
    loading('hide');
    document.imageform.reset();
}
于 2013-07-17T14:19:11.497 回答