我知道这是一个旧线程,但我想我会分享我的经验。我在工作中的一个项目上遇到了几乎相同的问题。我到处搜索并尝试了很多不同的东西,但最后发现它工作得很好(在这里的一些帖子的帮助下!)。到目前为止,我使用 FF 30、IE11 和 chrome 进行了测试。简而言之,我有一个可以放置 iframe 的父 HTML 页面。该 iframe 加载包含另一个 iframe 的 aspx 页面。最里面的 iframe(child_page_2.aspx) 有动态内容,我希望两个 iframe 都相应地调整大小。另外,为了清楚起见,这些都在同一个域/主机名上。
我在最里面的 iframe(child_page_2.aspx)上使用数据列表进行分页。每次点击页码都会生成不同高度的动态内容,即浏览分页数据。我发现执行 OnClick() 事件服务器端并使用 ScriptManager 触发客户端 javascript 会在加载内容后返回正确的高度。我没有显示所有 DataList 代码,只是嵌套在 ItemTemplate 中的一个链接按钮。
我知道这是一种非常糟糕的设置网页的方式,这正是我们被迫做的,因为我们只能访问 HTML 父页面。嵌套 iframe 的原因是为我们提供了一种“菜单”页面,其内容位于其下方的 iframe 中(child_page_1.aspx --> child_page_2.aspx)。
希望这对某人有帮助!
父页面.HTML:
<iframe src=child_page_1.aspx id="mainFrame" />
child_page_1.aspx:
<head>
<script type="text/javascript">
function adjustMyFrameHeight() {
var frame = getElement("mainFrame");
frame.height = document.body.offsetHeight + 60 + "px";
}
function getElement(aID) {
return (document.getElementById) ?
parent.document.getElementById(aID) : parent.document.all[aID];
}
function updateframeheight(newheight) {
var frame = document.getElementById("subFrame");
frame.height = newheight + "px";
adjustMyFrameHeight();
}
</head>
<body onload="adjustMyFrameHeight();">
<iframe id="subFrame" src="child_page_2.aspx" >
</body>
child_page_2.aspx:
<head>
<script type="text/javascript">
function adjustMyFrameHeight() {
var frame = getElement("subFrame");
frame.height = document.body.offsetHeight + 60 + "px";
}
function getElement(aID) {
return (document.getElementById) ?
parent.document.getElementById(aID) : parent.document.all[aID];
}
function updatesize() {
parent.updateframeheight(document.body.offsetHeight + 60);
}
</script>
</head>
<body onload="adjustMyFrameHeight();">
<form>
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
<ContentTemplate>
<asp:LinkButton ID="lnkbtnPrevious" runat="server" OnClick="lnkbtnPrevious_Click">Previous</asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
</form>
child_page_2.aspx.cs:
protected void lnkbtnPrevious_Click(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(Page, typeof(Page), "updatesize", "updatesize();", true);
}