我正在使用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属性。
答案 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>