【问题标题】:Iframe doesn't show onload, but it does after manual reloadiframe 不显示 onload,但在手动重新加载后会显示
【发布时间】:2014-02-04 15:42:19
【问题描述】:

我正在使用 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 未定义”。但如果我在我的网络浏览器中查看页面源,它​​就很明显了。如果我右键单击框架应该所在的空白页面,然后选择“重新加载框架”(Google Chrome),框架会显示 Html。

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

【问题讨论】:

    标签: c# javascript asp.net iframe


    【解决方案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>
    

    【讨论】:

    • 我不得不添加额外的括号:$(loadFrameContent()),但它有效。我不知道加载时间问题。谢谢!
    • 如果整个 Web 应用程序位于 microsoft CRM 中的 iframe 中,则它在 FF 和 IE 中不起作用。但它确实适用于 Chrome(总是),如果它只是被视为一个常规网站(不是内置到 CRM 中),它也适用于 FF 和 IE。奇怪:(
    • MS CRM 有它自己的 javascript 废话,可能会干扰呼叫。我对它不是很熟悉,但我已经看过它的一些代码。 Chrome 并不总是那么挑剔,但即使是最轻微的打嗝,IE 也会咆哮。我建议在您的代码中添加一些 console.log 语句,以跟踪其在 IE 中的进度或加载 Firebug 并将其附加到 Firefox 以查看它在做什么。
    • 经过一些调试,我们让它工作了,但我们真的不知道是什么让它工作。我们最好的猜测是我们有两个同名的 javascript 函数。我们的函数被称为“loadFrame()”,这很可能与 CRM javascript 函数相冲突,因为它是一个通用名称。为了解决这个问题,我们在所有函数前加上公司名称。
    猜你喜欢
    • 2020-01-28
    • 1970-01-01
    • 2020-03-10
    • 2014-09-04
    • 2013-11-20
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 2013-11-13
    相关资源
    最近更新 更多