Iframe页面显示的问题

Justin-Liu
博客专家认证
2010-10-15 05:25:42
一个页面中有一个到多个iframe不等,刷新页面的时候,有时部分iframe会消失,但是查看源代码,还有对应的部分,求解决办法,使iframe能全部正常显示。
...全文
638 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
原因有多种:
1.页面内容没加载完。

2.如果如楼主所说,已经存在要显示的完整内容,那可能是布局和CSS写得有问题。建议用较少一部分内容来测试看看。

3.注意到要显示的地址是由不同的模板页或后台程序生成的,所以要注意一下,DOCTYPE的使用要和页面CSS相配套,如果使用了比较严格的DOCTYPE而CSS写得又不严格,也会不显示。可以把DOCTYPE删除掉看看。
ssiije 2010-11-03
  • 打赏
  • 举报
回复
刚写了一个:
window.onload = function autoHeight(){

var doc = document,
p = window;
while(p = p.parent){
var frames = p.frames,
frame,
i = 0;
while(frame = frames[i++]){

if(frame.document == doc){

frame.frameElement.style.width = doc.body.scrollWidth;
frame.frameElement.style.height = doc.body.scrollHeight;
doc = p.document;
break;
}
}
if(p == top){
break;
}
}
}
guoymcl 2010-11-03
  • 打赏
  • 举报
回复
学习一下!
Justin-Liu 2010-11-03
  • 打赏
  • 举报
回复
Justin-Liu 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 dalmeeme 的回复:]
在body的最后调用js试试:
<html>
<head>
<script>
function displayAllTable()
{
var tables=document.getElementsByTagName("table");
for(var i=0;i<tables.length;i++)
tables[i].style.display="block";
……
[/Quote]
不是 那个table本来就是不用的,再创建完表格后,那个table节点应该没了就,出现的应该是div
这个table还有,说明没有create出表格
dalmeeme 2010-10-30
  • 打赏
  • 举报
回复
在body的最后调用js试试:
<html>
<head>
<script>
function displayAllTable()
{
var tables=document.getElementsByTagName("table");
for(var i=0;i<tables.length;i++)
tables[i].style.display="block";
}
</script>
</head>
<body>
所有其他代码
<script>displayAllTable()</script>
</body>
</html>
dalmeeme 2010-10-30
  • 打赏
  • 举报
回复
<table id="flex1" style="display: none">
那不是不显示嘛。。。
Justin-Liu 2010-10-30
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ayymbirst 的回复:]
该部份代码存在风险
var rt = 60 * 10;
sh = setInterval("reinitIframe()", 3000);
setInterval("flexireload()", rt * 1000);

建议写在:$(document).ready(function(){...})
可能是dom未加载完全,便执行了如上代码.
[/Quote]
你说的也是我所想的
我又仔细看了一下 没加载出来的情况,是<div id="frame_content">
<table id="flex1" style="display: none">
</table>
这样的格式,即没有像正常取出数据的那种是一个div包起来的表格
bhbhxy 2010-10-29
  • 打赏
  • 举报
回复
可以改用ajax加载,或者在没加载完的时候放一个图标表示正在读取数据
ayymbirst 2010-10-29
  • 打赏
  • 举报
回复
该部份代码存在风险
var rt = 60 * 10;
sh = setInterval("reinitIframe()", 3000);
setInterval("flexireload()", rt * 1000);

建议写在:$(document).ready(function(){...})
可能是dom未加载完全,便执行了如上代码.
我是一道光_ 2010-10-28
  • 打赏
  • 举报
回复



额,学艺不精,来看看。
Apple874804864 2010-10-28
  • 打赏
  • 举报
回复
关注。。。。。。。。。。。
ENetLive 2010-10-28
  • 打赏
  • 举报
回复
你可以iframe指定页面路径通过js给它加一个随便换的参数(随机数或当期时间),这样就可以了,我在项目遇到过这样的问题就这样解决的
Justin-Liu 2010-10-28
  • 打赏
  • 举报
回复
Justin-Liu 2010-10-22
  • 打赏
  • 举报
回复
刷新的时候不一定哪个 就是空白 没有创建出表,但方法肯定是都执行的了,我加过alert
Justin-Liu 2010-10-22
  • 打赏
  • 举报
回复
<%@ Page Language="C#" AutoEventWireup="true" %>

<script type="text/C#" runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
NameValueCollection co = this.Request.QueryString;
StringBuilder sb = new StringBuilder();
foreach (string s in co.AllKeys)
{
sb.AppendFormat("var {0}='{1}';", s, co[s]);
}
if (!this.Page.ClientScript.IsClientScriptBlockRegistered("params"))
{
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "params", sb.ToString(), true);
}
}
}
</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>我的待办</title>
<script src="/_layouts/script/jQuery.js" type="text/javascript"></script>
<script src="/_layouts/script/flexigrid.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="/_layouts/styles/flexigrid.css" />
</head>
<body style="margin: 0px; padding: 0px; font-size: 12px; height: 100%">
<form id="form1" runat="server">
<div id="frame_content">
<table id="flex1" style="display: none">
</table>
</div>
<%
String sys = Request["className"];
string refreshTime = Request["refreshtime"];
%>

<script type="text/javascript">
var s = window.parent.document.getElementById(webpart);
var w = $(s).width();
var h = $(s).height();
$(s)[0].firstChild.width = w;
var sh;
var eq = 0;
function reinitIframe() {
var iframe = document.getElementById("frame_content");
try {
var bHeight = iframe.scrollHeight;
var dHeight = iframe.document.documentElement.scrollHeight;
var ht = Math.max(bHeight, dHeight);
$(s)[0].firstChild.height = ht;
if (bHeight == dHeight)
eq++;
if (eq >= 5)
try {
clearInterval(sh);
}
catch (ex) { }


} catch (ex) { }
}
// var rt = "<%=refreshTime%>";
var rt = 60 * 10;
sh = setInterval("reinitIframe()", 3000);
setInterval("flexireload()", rt * 1000);
var a = "<%=sys %>";
switch (a) {
case "MailPart":
creatgrid("mail", "/_layouts/Document/OA_Login.aspx?url=http://office.ln.cmcc/eOffice/OA/View/PortalCenter_mail.asp", "共有{total}封未读", 210);
break;
case "AmsPart":
creatgrid("ams", "/_layouts/document/AmsSSO.aspx?type=amslistmore", "共有{total}条未读");
break;
case "BaozhangPart":
creatgrid("baozhang", "/_layouts/Document/donettojava_sso.aspx?sysname=baozhang", "共有{total}条未读");
break;
case "EhrPart":
creatgrid("ehr", "/_layouts/Document/ehrentry.aspx?_userName=&_misId=", "共有{total}条未读");
break;
case "EpmsPart":
creatgrid("epms", "/_layouts/Document/SmapChagePage.aspx?_url=http://10.1.48.235:80/index.html&remoteAppId=epms@hq.cmcc", "共有{total}条未读");
break;
case "InnovationPart":
creatgrid("innovation", "/_layouts/Document/chuangxinWaitInfo.aspx", "共有{total}条未读");
break;
case "BudgetPart":
creatgrid("budget", "/_layouts/Document/BudgetInfo.aspx", "共有{total}条未读");
break;
case "ContractPart":
creatgrid("contract", "http://portaltest01/sites/contract/mytest.aspx", "共有{total}条未读");
break;
case "EPMPart":
creatgrid("epm", "/_layouts/Document/EPMInfo.aspx", "共有{total}条未读");
break;
case "TDBZPart":
creatgrid("td_bz", "/_layouts/Document/donettojava_sso.aspx?sysname=tderp", "共有{total}条未读");
break;
default:
break;
}
function flexireload() {
$("#flex1").flexReload();
}
function creatgrid(sys, moreurl, moreinfo, hei) {
$("#flex1").flexigrid
(
{
url: '/_layouts/Document/ProvideJson.aspx?getdata=' + sys,
moreurl: moreurl,
dataType: 'json',
colModel: [
{ display: '发件人', name: 'Addresser', width: 60, align: 'left' },
{ display: '标题', name: 'Url', width: w - 160, align: 'left' },
{ display: '发送时间', name: 'addresser', width: 60, align: 'left' }
],
sortname: "url",
sortorder: "asc",
usepager: true,
useRp: false,
rp: 5,
nowrap: true, //是否不换行
pagestat: moreinfo,
procmsg: '读取中 ...',
showTableToggleBtn: false,
width: w,
autoload: true,
height: "auto"
}
);
}
</script>

</form>
</body>
</html>

这是代码,每个Iframe里面都是这么个东西
最近有事儿让我遗忘了哈。。。
Justin-Liu 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dalmeeme 的回复:]
jquery我不懂,你可以把代码再精简一下看看还会有问题吗?估计是js的代码有问题。你试试在最后用alert显示各个iframe的src属性看看,都有值吗?
[/Quote]
其实我也不懂 哈哈 它就是一个创建表格的方法应该是

另外,显示与不显示的时候,我都查看过页面的源代码,这两个源代码是一模一样的。。。
mark620 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 foxdave 的回复:]
HTML code
<%@ Page Language="C#" AutoEventWireup="true" %>

<script type="text/C#" runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
……
[/Quote]

顶!
dalmeeme 2010-10-22
  • 打赏
  • 举报
回复
jquery我不懂,你可以把代码再精简一下看看还会有问题吗?估计是js的代码有问题。你试试在最后用alert显示各个iframe的src属性看看,都有值吗?
Justin-Liu 2010-10-22
  • 打赏
  • 举报
回复
加载更多回复(5)

61,129

社区成员

发帖
与我相关
我的任务
社区描述
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。
社区管理员
  • HTML(CSS)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧