Iframe自适应问题~~~愁白了头

wfg2004 2006-04-28 04:53:09
最近我在网上调查过很多的帖子,可是就是没有答案~~谁会能解决?我把这100分全给你~急。。。

目的:想在iframe中显示别的域的网页,并且取得别的域的csrollheight值
解决办法:通过JS取得
代码:<html>
<head>
<script language="JavaScript">
var iframeids=["testframe","testframe1"];
function dyniframesize()
{
var dyniframe=new Array();
for (i=0; i<iframeids.length; i++)
{
if (document.getElementById)
{
//自动调整iframe高度
dyniframe[dyniframe.length] = document.getElementById(iframeids[i]);

if (dyniframe[i] && !window.opera)
{
if (dyniframe[i].contentDocument && dyniframe[i].contentDocument.body.offsetHeight) //NetScape
dyniframe[i].height = dyniframe[i].contentDocument.body.offsetHeight;
else if (dyniframe[i].Document && dyniframe[i].Document.body.scrollHeight) //IE
dyniframe[i].height = dyniframe[i].Document.body.scrollHeight;
}
}
}
}

if (window.addEventListener)
window.addEventListener("load", dyniframesize, false)
else if (window.attachEvent)
window.attachEvent("onload", dyniframesize)
else
window.onload=dyniframesize
</script>
</head>
<body>
<form>
<iframe id="testframe" name="left" src="http://www.baidu.com"></iframe>
<iframe id="testframe1" name="right" src="WebForm3.aspx"></iframe>
</form>
</body>
</html>
问题点:当Iframe的src为“WebForm3.aspx”时,能够取到“WebForm3.aspx”的页面的
scrollheight值,原因是这个页面和现在的页面在同一个域内。
但是当Iframe的src为“http://www.baidu.com”时,提示我“拒绝访问”,抱错了。
其中里面关键的一句话就是“dyniframe[i].Document.body.scrollHeight”这句话。
我也找了些原因,好像是说“不能跨域”,不知道大家有没有遇到过这种问题。
但是我程序必须要得到Iframe的目标页面的scrollheight的值,请问各位有没有方法
可以实现跨域访问,或者别的方法也可以。
谁能解决我把这100分全部给大家,我还是新手,但是上司非让这么实现,我也是
没有办法。
以前我用相同的语句,在php里面实现了,没有这种提示,但是在.NET里面就出现了
这种跨域权限的问题,我也很郁闷。
...全文
464 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
harryCom 2006-06-30
  • 打赏
  • 举报
回复
这是以前写过的一个例子
b.htm:
function fObserve(oElement, name, observer, useCapture) {
if (oElement.addEventListener) {
oElement.addEventListener(name, observer, useCapture);
} else if (oElement.attachEvent) {
oElement.attachEvent('on' + name, observer);
}
}
function fSetOutLinkIframe(){
var div = document.createElement("DIV");
var h = document.body.scrollHeight;

div.innerHTML = '<iframe style="height:0px;width:0px;" src="http://www.aaa.com/xxx.htm?h='+ h +'"></iframe>';;
document.body.appendChild(div);
}
fObserve(window, "load", fSetOutLinkIframe);

xxx.htm:
function go(){
var p = location.search.split("h=");
if(p.length == 1){
return;
}
var h = p[1]-0;
try{
var ifrm = top.document.getElementById("iframe_id");
ifrm.style.height = h+50 + "px";
}catch(exp){}
}
go();
harryCom 2006-06-30
  • 打赏
  • 举报
回复
如果iframe里面的内容可以修改的话,可以这样做:

假如页面a:http://www.aaa.com/a.htm里面有个iframe b:http://www.bbb.com/b.htm

在b页面生成一个iframe,url使用和a一样的域,并加入scrollHeight参数,如:
<iframe src="http://www.aaa.com/xxx.htm?height=scrollHeight">

最后在xxx.htm使用以下脚本重新设置a页面的iframe高度:
top.document.getElementById("iframe_id").style.height = url参数scrollHeight + "px";

oldcsdn 2006-06-30
  • 打赏
  • 举报
回复
在后台做做手脚吧, 自己写一个服务端页面,如 <iframe src = "baidu.aspx ">这个页面里使用 WebClient 类将这跨域的页面取取本地服务器发回即可
xuzuning 2006-06-30
  • 打赏
  • 举报
回复
“以前我用相同的语句,在php里面实现了,没有这种提示,但是在.NET里面就出现了这种跨域权限的问题,我也很郁闷。”这是不可能的,不能跨域操作是生来就有的,完全出于安全的考虑

1、如果是内部用ip访问的网站的网站,那么只要做一个dns就没有问题了
2、如果含有公司的公网网站,或不会配置dns。那么可以做一个代理。对于php而言,就有现成的phproxy可用。

  • 打赏
  • 举报
回复
呵呵,怎么不让你上司给个思路。如果他没思路,还指挥什么。
guokecool 2006-06-29
  • 打赏
  • 举报
回复
我做过类似的东西,MSN找我kyle1982214@hotmail.com
JK_10000 2006-06-29
  • 打赏
  • 举报
回复
如果iframe里的页面(WebForm3.aspx)是你们自个写的,
那就可以把自适应大小的代码写在WebForm3.aspx里(用window.resizeTo),
这样就不会有跨域的问题
livesylvia 2006-06-28
  • 打赏
  • 举报
回复
在iframe外加一个div。取div的应该可以
meizz 2006-06-28
  • 打赏
  • 举报
回复
自从浏览器禁止 xmlhttp 跨域访问之后,你要 request 其它站点的内容就比较困难了。

在IE里还有一种方式,以前可以使用的。
//如何在html 页面 include 其它页面
<IE:Download ID="oDownload" STYLE="behavior:url(#default#download)" />
<body onload="oDownload.startDownload('tt.htm',onDownloadDone)">
<span id=showImport></span>
<script language=javascript><!--
function onDownloadDone(downDate)
{
document.all.showImport.innerHTML=downDate; //这种方法被讨论出来是最好的
}
//--></script>
fatlity 2006-06-28
  • 打赏
  • 举报
回复
期待中……
wfg2004 2006-05-06
  • 打赏
  • 举报
回复
如果我用免费的二级域名,我的网站是不是不安全了?具体有哪些危害,危险,能给解释一下吗?
wfg2004 2006-05-06
  • 打赏
  • 举报
回复
直接request一个内容过来,然后填到一个div或者table, 自动扩展,可以实现吗? 有人会写吗?
wfg2004 2006-05-06
  • 打赏
  • 举报
回复
直接request一个内容过来,然后填到一个div或者table, 自动扩展,可以实现吗? 有人会写吗?
wfg2004 2006-05-06
  • 打赏
  • 举报
回复
用DIV也一样,不能实现跨域访问
  • 打赏
  • 举报
回复
MARK
mrshelly 2006-05-06
  • 打赏
  • 举报
回复
为什么不用DIV?????
wfg2004 2006-05-06
  • 打赏
  • 举报
回复
怎么修改服务器的host文件?我必须先注册域名吗?如果我只在内部网用,可不可以不用注册就能用啊?
ice_berg16 2006-04-29
  • 打赏
  • 举报
回复
都用二级域名就OK了啊

www.host.com
site1.host.com
site2.host.com
wfg2004 2006-04-28
  • 打赏
  • 举报
回复
请问有什么具体的例子吗?
比如说,怎么修改服务器的host文件等等,能给个例子看吗?
meizz 2006-04-28
  • 打赏
  • 举报
回复
方法到是有,比如用server.xmlhttp,比如你修改服务器的host文件,把不同域的东东用一个域名搞定等。
加载更多回复(7)

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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