2011-12-16 182 views
0

使用iframe发布提交,它具有文件上传。一切工作正常直到返回的内容。iframe提交获取发布的内容

如果我在页面上显示iframe,我看到从我的iframe中的函数返回的HTML。获取iframe的内容以替换页面的内容时遇到很多问题。

基本上获取body iframe的内容并将其放置在页面的body标签中。 我确定它的1或2行,但是我在网上找到的每个jquery或document或getElementById想法都无法正常工作。

我注意到一些奇怪的事情,如果我尝试在我的重装功能中使用“console.info('somemessage')”,它会抛出一个错误,表示控制台不存在。不知道为什么,但似乎我的JavaScript焦点是在iframe中,并看不到萤火虫。

继承人代码被剥离。回到尝试正在工作的.load事件。但是它的第二条命令是将内容写入身体。当我评论它,iframe显示,与我的内容。如果我运行它取消注释,整个页面重新加载。

 if (isStarted == false) { 
      isStarted = true; 
      statustracker.start(); 
      //style="height:0px;width:0px;" 
      var iframe = $('<iframe name="postframe" id="postframe" class="hidden" />'); 
      $('div#iframe').append(iframe); 

      $('#ImportDetailForm').attr("target", "postframe") 
      form.submit(); 

      $("#postframe").load(function() { 
       iframeContents = $("iframe")[0].contentDocument.body.innerHTML; 
       $("body").html(iframeContents); // <--- the problem 
      }); 
     } 
+0

所有表单设置(attr)都在表单标签中。表单对象是jquery validate submithandler中的一个对象。 – 2011-12-16 16:46:05

回答

0

在你父页面(包含iframe中的一个),你可以设置一个事件侦听器“信息”事件,就像这样:

window.addEventListener("message", receiveMessage, false); 
function receiveMessage(e) { ... } 

然后在你的iframe,只是发布消息是这样的“父”窗口:

parent.postMessage(someString, parentUrl); 

因为消息是字符串,你需要序列化的任何数据你iframe和父窗口之间发送 - 我建议JSON!所以在你的情况下,从上传请求序列化返回的HTML并将其发布给父代,然后在该端反序列化并将其注入到DOM中。

+0

我无法弄清楚如何获取序列化的iframe内容。试图使用jquerys/json .serialize()但不起作用。 – 2011-12-16 17:07:36

0

无效或非法字符串指定“代码:” 12

可能是因为iframeContents是空的。

  $("#postframe").load(function() { 
       var win = document.getElementById("postframe").contentWindow; 
       var parent_url = decodeURIComponent(document.location.hash.replace(/^#/, '')), link; 
       iframeContents = $("#postframe").find("body").contents().serialize(); //$("iframe")[0].contentDocument.body.innerHTML; 
       console.info(iframeContents); 
       //$(this).parent("body").html(iframeContents); 
       win.postMessage(iframeContents, parent_url, parent); 
      });