iframe没有显示onload,但它在手动重新加载后会显示

时间:2014-02-04 15:42:20

标签: c# javascript asp.net iframe

我正在使用Asp.net/C#环境和Visual Studio 2013来创建Web应用程序。

我有一个页面(aspx),其中只有一个iframe,以及一个使用jquery将html放入该框架的javascript方法。

<asp:Content runat="server" ID="MainSectionContent" ContentPlaceHolderID="MainSectionContentPlaceHolder">
    <section runat="server" id="FrameSection" clientidmode="Static">
        <asp:ContentPlaceHolder runat="server" ID="FrameSectionContentPlaceHolder" />
        <iframe id="FrameContentFrame" name="FrameContentFrame" src="about:blank" seamless="seamless" onload=" loadFrameContent(); "></iframe>
    </section>

    <script type="text/javascript">
        //<![CDATA[
        function loadFrameContent() {
            jQuery('#FrameContentFrame').contents().find('html').html('<%= FrameContent %>'); //FrameContent is a c# property which holds a syntactically correct html string
        }
        //]]>
    </script>
</asp:Content>

在我的代码后面,我从服务器获取一个长字符串并将其存储在属性FrameContent中。这个长字符串在语法上是正确的html。

结果应该是: onload,javascript方法运行。 iframe填充了html,因此html字符串会显示给用户。

但是真正发生了什么: 没有任何显示。发生Javascript错误,说“函数loadFrameContent未定义”。但是,如果我在网络浏览器中查看页面源代码,那就很明显了。如果我右键单击框架所在的空白页面并选择“重新加载框架”(谷歌浏览器),框架会显示Html。

所以:Html字符串是正确的。框架是正确的。框架可以正确显示HTML。但是,框架无法显示Html onload,它需要额外的手动重新加载才能显示任何内容!我在浏览器上检查了页面源代码并且存在Javascript函数,并且使用正确的html字符串填充了FrameContent属性。

1 个答案:

答案 0 :(得分:1)

正如我所看到的,它看起来像是一个时间问题。空白iframe将在您的父页面之前完成加载,因此它将在父页面完成解析其dom之前调用loadFrameContent(因此该方法将不会被注册)。摆脱iframe onload并添加:

<script type="text/javascript">
    //<![CDATA[
    function loadFrameContent() {
        jQuery('#FrameContentFrame').contents().find('html').html('<%= FrameContent %>');     //FrameContent is a c# property which holds a syntactically correct html string
    }

    $(loadFrameContent);

    // Or if you're using an older version of jQuery
    //$(document).ready(loadFrameContent);
    //]]>
</script>