iframe提交获取发布的内容

时间:2011-12-16 16:20:19

标签: javascript post iframe

使用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
            });
        }

2 个答案:

答案 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);
            });