使用jQuery获取帧内容

时间:2011-06-25 12:41:20

标签: jquery

main.html 有以下代码:

<iframe id="myframe" src="myframe.html"></iframe>

我在main.html中触发了这段代码:

alert($('#myframe').contents().find('#mypage').contents().find('html').html());

myframe.html 有以下代码:

<frameset>
<frame id="mypage" src="mypage.html">
</frameset>

mypage.html 包含以下所有代码:

<!DOCTYPE HTML>
<html>
<head>
</head>
hello world!
</html>

我想从main.html页面获取mypage.html的所有HTML代码,但是我失败了。我的方式有什么问题?

3 个答案:

答案 0 :(得分:0)

从技术上讲,我不认为你可以使用框架,因为这会是一个安全问题。

如果您确实需要使用ajax,可以使用ajax加载内部框架的源代码。但它肯定不会是现场

答案 1 :(得分:0)

首先,您需要在main.html中包含jquery库。 其次, Chrome会返回下一个错误:

  

不安全的JavaScript尝试访问   带有URL文件的框架:///../myframe.html   来自带框架的框架   文件:///../main.html。域,   协议和端口必须匹配。

所以这是一个安全问题

答案 2 :(得分:0)

我遇到了同样的问题。

我能够解决它。

在我的例子中:

myframe = ReportFrameReportViewerControl
mypage = report

这是获取html的代码(请注意,所有网站都需要位于同一个域中):

function bla()
{
    var str = 
    $(
            $(
                $("#ReportFrameReportViewerControl")[0].contentWindow.document
            )
            .find("#report")[0].contentWindow.document
        ).find("html").html()
        ;

        alert(str);
}

您可能希望将其放在按钮上,按下该按钮后可以按下该按钮:

<input type="button" value="test" onclick="bla();" />

另外,如果你想在页面加载后自动获取html,你需要注册myframe和amp;的onload函数。我的编目。

像这样(用bla替换setTableSize):

$(document).ready(function () 
{
    $('#ReportFrameReportViewerControl').load(function () 
    {
        //setNewHeight();
        //alert("Loading");

        setTableSize();

        $(
            $("#ReportFrameReportViewerControl")[0].contentWindow.document
        )
        .find("#report").load(function () 
        {
            //alert("load report");
            setTableSize();
        }
        ); // End load #report


    }); // End Function load #ReportFrameReportViewerControl


}); // End Function document.ready