使用iframe发布提交,它有一个文件上传。一切都工作正常,直到返回的内容。
如果我在页面上显示iframe,我会看到从我的iframe中的函数返回的html。获取iframe的内容以替换页面内容时遇到很多麻烦。
基本上获取正文iframe的内容并将其放在页面的body标签中。 我确定它的1或2行,但是我在网上找到的每个jquery或document或getElementById的想法都不起作用。
我确实注意到一些奇怪的事情,如果我尝试使用" console.info(' somemessage')"在我的重装功能中,它会抛出一个错误,说控制台不存在。不知道为什么,但似乎我的javascript焦点在iframe中,并且无法看到firebug。
下面的代码被删除了。回到尝试.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 :(得分:0)
在您的父页面(包含iframe的页面)中,您可以为'message'事件设置一个事件监听器,如下所示:
window.addEventListener("message", receiveMessage, false);
function receiveMessage(e) { ... }
然后在你的iframe中,只需将消息发布到“父”窗口,如下所示:
parent.postMessage(someString, parentUrl);
因为消息是字符串,所以你需要序列化你在iframe和父窗口之间发送的任何数据 - 我建议使用JSON!因此,在您的情况下,从上传请求中序列化返回的HTML并将其发布到父级,然后在该侧反序列化并将其注入DOM。
答案 1 :(得分:0)
指定了无效或非法的字符串“code:”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);
});