- 浏览: 14491 次
- 性别:
- 来自: 深圳
文章分类
最新评论
需求是:A页面(例如:www.taobao.com) 要嵌入B(例如: www.alibaba.com),因为不能确定B页面的高度,所以要求高度自适应。
具体代码:
iframe主页面 A.html
<div>
<iframe id="aFrame" scrolling='no' border=0 frameborder=0 width=100% height="400px" class="failure"
src="www.alibaba.com/B.html" runat="server"></iframe>
</div>
cross.js --cross放到父页面的域名下
复制代码
var inner = inner || {};
var getUrlValue = function (url) {
var url = (url !== undefined) ? url : window.location.href;
if (url.indexOf("#") > -1) {
var variable = url.split("#")[1];
} else {
var variable = url.split("?")[1];
}
if (variable === undefined) {
return {};
} else {
var value = {};
variable = variable.split("&");
for (var i = 0, m = variable.length; i < m; i++) {
value[variable[i].split("=")[0]] = variable[i].split("=")[1]; }
return value;
}
}
var mathor_url = getUrlValue()['mathor_url'];
if (!mathor_url) {
if (/alibaba.com/.test(window.location.href.match(/[^htps\/]*[^\/]+/g)[1])) {---------判断是否是阿里巴巴的域名
mathor_url = "www.taobao.com.cn/qiantao"; --------------要修改的A页面服务器地址(此地址是proxy放置地址的前段部分)
}else{
mathor_url="
www.taobao.com.cn/qiantao
";------------
要修改的A页面服务器地址
(可以是测试地址,或者是如果正式测试的都一样,则else可不要)
}
}
inner = {
iframe_el: null,
url: 'http://' + mathor_url,
aid: 1,
href: null,
time: null,
signA: false,
autoHeight: true,
getDocHeight: function () {
var height = (navigator.appName == "Microsoft Internet Explorer") ? document.body.scrollHeight + 20 : document.body.offsetHeight + 20;
return height;
},
postAction: function (u) {
var fd = this; clearInterval(this.time);
fd.iframe_el_new = document.createElement('iframe');
fd.iframe_el_new.height = 0;
fd.iframe_el_new.style.height = '0px';
fd.iframe_el_new.style.width = '0px';
fd.iframe_el_new.style.border = 'none';
fd.iframe_el_new.width = 0;
fd.iframe_el_new.frameborder = 0;
fd.iframe_el_new.border = 0;
fd.iframe_el_new.scrolling = 'no';
fd.iframe_el_new.src = fd.url + "/proxy.htm#aid=" + this.aid + "&" + u;
fd.iframe_el.parentNode.appendChild(fd.iframe_el_new);
fd.iframe_el.parentNode.removeChild(fd.iframe_el);
fd.iframe_el = fd.iframe_el_new;
this.aid++;
},
setHeight: function (height) {
if (height === undefined) {
height = this.getDocHeight();
}
this.postAction("action=setheight&height=" + height);
},
start: function () {
var fd = this;
fd.iframe_el = document.getElementById("aFrame"); -----更改ifram的名称
if (this.autoHeight) {
fd.old_height = 0;
var autoHeight = function () {
if (fd.old_height != inner.getDocHeight()) {
fd.old_height = inner.getDocHeight();
fd.setHeight();
}
}
setInterval(autoHeight, 200);
}
}
};
document.write('<iframe id="aFrame" style="width:0; height:0; border:none;" frameborder="0" scrolling="no" src="' + inner.url + '/proxy.htm#aid=0&action=setheight&height=' + inner.getDocHeight() + '"></iframe>');-----此处也要进行修改,拼接proxy.htm的位置,注意proxy.htm存放的位置
inner.start();
(function () {if (!!window.ActiveXObject && !window.XMLHttpRequest) {
var links = document.getElementsByTagName('a');
for (i = links.length - 1; i >= 0; i--) {
var clink = links[i];
if (clink.target == "_top") {
clink.onclick = (function () {
var chref = clink.href;
return function () {
if (window.top) {
window.top.location = chref;
}
}
})()
}
}
}
})()
复制代码
proxy.htm (代理页) --代理页面放到父页面的域名下
复制代码
<!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>
<title></title>
</head>
<body>
<script type="text/javascript">
var old_aid = null;
var action = function () {
try {
if (window.location.href.indexOf("#") == -1) return;
var aid = window.location.href.match(/(#|&)aid=(.*?)(&|$)/ig)[0].match(/[0-9]+/)[0];
var height = window.location.href.match(/(#|&)height=(.*?)(&|$)/ig)[0].match(/[0-9]+/)[0];
if (aid == null) return;
old_aid = aid;
if (-[1, ]) {
height = parseInt(height) + 20;
}
window.parent.parent.document.getElementById("aFrame").style.height = height + "px";
} catch (e) { }
};
action();
</script>
</body>
</html>
复制代码
最后将自适应的页面www.alibaba.com/B.html中添加引用cross.js脚本(放到</body>之前)
http://www.cnblogs.com/liushanshan/archive/2011/05/19/2051094.html
具体代码:
iframe主页面 A.html
<div>
<iframe id="aFrame" scrolling='no' border=0 frameborder=0 width=100% height="400px" class="failure"
src="www.alibaba.com/B.html" runat="server"></iframe>
</div>
cross.js --cross放到父页面的域名下
复制代码
var inner = inner || {};
var getUrlValue = function (url) {
var url = (url !== undefined) ? url : window.location.href;
if (url.indexOf("#") > -1) {
var variable = url.split("#")[1];
} else {
var variable = url.split("?")[1];
}
if (variable === undefined) {
return {};
} else {
var value = {};
variable = variable.split("&");
for (var i = 0, m = variable.length; i < m; i++) {
value[variable[i].split("=")[0]] = variable[i].split("=")[1]; }
return value;
}
}
var mathor_url = getUrlValue()['mathor_url'];
if (!mathor_url) {
if (/alibaba.com/.test(window.location.href.match(/[^htps\/]*[^\/]+/g)[1])) {---------判断是否是阿里巴巴的域名
mathor_url = "www.taobao.com.cn/qiantao"; --------------要修改的A页面服务器地址(此地址是proxy放置地址的前段部分)
}else{
mathor_url="
www.taobao.com.cn/qiantao
";------------
要修改的A页面服务器地址
(可以是测试地址,或者是如果正式测试的都一样,则else可不要)
}
}
inner = {
iframe_el: null,
url: 'http://' + mathor_url,
aid: 1,
href: null,
time: null,
signA: false,
autoHeight: true,
getDocHeight: function () {
var height = (navigator.appName == "Microsoft Internet Explorer") ? document.body.scrollHeight + 20 : document.body.offsetHeight + 20;
return height;
},
postAction: function (u) {
var fd = this; clearInterval(this.time);
fd.iframe_el_new = document.createElement('iframe');
fd.iframe_el_new.height = 0;
fd.iframe_el_new.style.height = '0px';
fd.iframe_el_new.style.width = '0px';
fd.iframe_el_new.style.border = 'none';
fd.iframe_el_new.width = 0;
fd.iframe_el_new.frameborder = 0;
fd.iframe_el_new.border = 0;
fd.iframe_el_new.scrolling = 'no';
fd.iframe_el_new.src = fd.url + "/proxy.htm#aid=" + this.aid + "&" + u;
fd.iframe_el.parentNode.appendChild(fd.iframe_el_new);
fd.iframe_el.parentNode.removeChild(fd.iframe_el);
fd.iframe_el = fd.iframe_el_new;
this.aid++;
},
setHeight: function (height) {
if (height === undefined) {
height = this.getDocHeight();
}
this.postAction("action=setheight&height=" + height);
},
start: function () {
var fd = this;
fd.iframe_el = document.getElementById("aFrame"); -----更改ifram的名称
if (this.autoHeight) {
fd.old_height = 0;
var autoHeight = function () {
if (fd.old_height != inner.getDocHeight()) {
fd.old_height = inner.getDocHeight();
fd.setHeight();
}
}
setInterval(autoHeight, 200);
}
}
};
document.write('<iframe id="aFrame" style="width:0; height:0; border:none;" frameborder="0" scrolling="no" src="' + inner.url + '/proxy.htm#aid=0&action=setheight&height=' + inner.getDocHeight() + '"></iframe>');-----此处也要进行修改,拼接proxy.htm的位置,注意proxy.htm存放的位置
inner.start();
(function () {if (!!window.ActiveXObject && !window.XMLHttpRequest) {
var links = document.getElementsByTagName('a');
for (i = links.length - 1; i >= 0; i--) {
var clink = links[i];
if (clink.target == "_top") {
clink.onclick = (function () {
var chref = clink.href;
return function () {
if (window.top) {
window.top.location = chref;
}
}
})()
}
}
}
})()
复制代码
proxy.htm (代理页) --代理页面放到父页面的域名下
复制代码
<!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>
<title></title>
</head>
<body>
<script type="text/javascript">
var old_aid = null;
var action = function () {
try {
if (window.location.href.indexOf("#") == -1) return;
var aid = window.location.href.match(/(#|&)aid=(.*?)(&|$)/ig)[0].match(/[0-9]+/)[0];
var height = window.location.href.match(/(#|&)height=(.*?)(&|$)/ig)[0].match(/[0-9]+/)[0];
if (aid == null) return;
old_aid = aid;
if (-[1, ]) {
height = parseInt(height) + 20;
}
window.parent.parent.document.getElementById("aFrame").style.height = height + "px";
} catch (e) { }
};
action();
</script>
</body>
</html>
复制代码
最后将自适应的页面www.alibaba.com/B.html中添加引用cross.js脚本(放到</body>之前)
http://www.cnblogs.com/liushanshan/archive/2011/05/19/2051094.html
发表评论
-
How to Execute Javascript on Ajax return
2012-10-22 18:35 1123Ajax is a nice technology to de ... -
执行AJAX返回HTML片段中的JavaScript脚本
2012-10-22 18:34 832如果AJAX加载的数据是一 ... -
12种不宜使用的Javascript语法
2012-09-16 21:06 661这几天,我在读《Javascript语言精粹》。 这本书很 ... -
Self-updating scripts
2012-09-12 16:31 828Updates: Philip Tellis deployed ... -
前端相关PPT搜集
2012-09-12 16:23 1046以下为本人搜集的关于前端一些质量比较好的原创PPT,不定期更 ... -
判断浏览器是否支持指定CSS属性和指定值
2012-09-12 16:06 1592现在css3出来了, 添加了许多新特性,但由于并未全部浏览器都 ... -
完美实现溢出文本省略
2012-09-12 16:02 653文本溢出展示省略号的需求经常都会用到,而对于新式的浏览器,这完 ... -
JS跨域访问操作iframe
2012-09-12 15:57 886很多人一直都有个想法,要是可以随心所欲的操作iframe就好了 ... -
Javascript定义类(class)的三种方法
2012-09-11 09:53 852将近20年前,Javascript诞生的时候,只是一种简单的网 ... -
【NodeCC】NodeJs开发的脚本压缩和combo工具
2012-09-10 23:04 956对于Web前端的开发而言,为了降低文件大小,js文件和css文 ... -
是时候使用JavaScript严谨模式(Strict Mode)提升团队开发效率
2012-09-10 23:00 970随着WebApp突飞猛进的发 ... -
HTML5中script的async属性异步加载JS
2012-09-10 16:59 1113HTML4.01为script标签定义了5个属性: cha ... -
前端学习资源
2012-09-03 10:15 772前端学习资源 1、http://www.javascrip ... -
一些不能订阅的前端学习资源
2012-09-03 10:14 616一些不能订阅的前端学习资源 1、http://friend ...
相关推荐
本篇文章将深入探讨如何解决iframe跨域高度自适应的问题。 首先,我们需要理解为什么会出现跨域问题。根据浏览器的同源策略,一个网页只能访问与之同源(即协议、域名和端口完全相同)的资源。而跨域则意味着iframe...
标题"iframe跨域高度自适应例子源码"指的是一个实例,展示了如何在跨域的情况下使`iframe`内容自动调整高度以适应其内部内容。这个例子提供了一个在线演示(http://okiner.cn/demo/cross-domain/iframe.html)以及源...
完美解决跨域iframe的高度自适应,完美解决跨子域iframe的高度自适应,嵌入几个页面解决跨域iframe的高度自适应。。。
### iframe跨域嵌套自适应高度 在网页开发过程中,`iframe`作为一种常见的网页元素,被广泛用于在当前页面中嵌入另一个独立的文档或页面。然而,在实际应用中经常会遇到一些问题,如跨域限制、自适应高度调整以及...
总结来说,`iframe`跨域自适应高度模板主要是通过`CORS`解决跨域限制,通过JavaScript监听`load`事件或使用`postMessage`通信来实现内容高度的动态调整。这些技术在现代网页开发中十分常见,能帮助我们更灵活地整合...
在网页开发中,`iframe`...总结,理解和掌握`iframe`的跨域解决方案以及自适应策略,对于开发高效且用户体验良好的Web应用至关重要。在实际应用中,还需要注意安全性、性能优化等问题,以提供更优质的网页服务。
总的来说,通过使用JavaScript动态计算`<iframe>`内容的高度并设置`<iframe>`的高度,可以有效地解决`<iframe>`内容高度自适应以及设置高度后无法缩小的问题。同时,要注意兼容性问题和跨域限制,以确保在各种环境下...
可以实现Iframe跨域自适应高度 main.htm和agent.htm文件放在www.a.com域内 iframe.htm放在www.b.com域内 这样就可以通过a.com域中的main.htm文件访问b.com域中的iframe.htm文件了
本文将深入探讨如何实现IFrame跨域高度自适应的解决方案。 首先,我们需要了解什么是跨域。在Web安全策略中,浏览器执行同源策略,这意味着一个网页只能访问与之同源(协议、域名、端口相同)的IFrame内容。但当...
标题提到的“iframe自动适应高度(完美自适应高度嵌套代码)”提供了一个解决方案,它能够确保`iframe`在各种主流浏览器中都能正确地自适应内容高度,包括360浏览器、IE6-9、遨游、火狐以及搜狗浏览器。 在传统的`...
1. **同源策略与iframe跨域** 同源策略是浏览器安全的一项基础机制,它限制了来自不同源的"文档"或脚本相互交互。当一个`iframe`加载的页面与包含它的页面不在同一个源下时,就会遇到跨域问题。为了解决这个问题,...
jQuery的iframe高度自适应解决方案通常涉及到监听iframe的“load”事件,当iframe内容加载完成后,获取其实际内容高度并设置为iframe的height属性。这种方法可以确保iframe始终能完全显示其内部内容,避免滚动条的...
总结,`iframe`高度自适应是前端开发中的常见问题,解决这个问题需要根据实际情况选择合适的方法,包括利用CSS、JavaScript、`window.postMessage` API,以及处理IE浏览器的兼容性问题。在实际操作中,一定要注意...
这个库允许的高度与同跨域iframe来适应他们所包含的内容的宽度自动调整大小。它最常见的问题与使用iframes提供一系列的功能,其中包括: 高度和宽度大小的iframe内容大小。 作品以多个嵌套的iframe。 跨域iframe域...
当Iframe加载跨域内容时,安全限制可能会影响高度的动态调整。在这种情况下,可以使用HTML5的`sandbox`属性,配合`allow-scripts`允许Iframe内的脚本运行,以便计算高度。 5. **设定定时器**: 有些情况下,内容...
Iframe框架高度自适应是一个重要的需求,特别是在内容动态更新或者跨域通信时,确保用户无需滚动两个独立的滚动条来查看全部内容。本篇文章将详细解释如何实现Iframe框架高度自适应,并分析给定代码的工作原理。 ...
为了解决这个问题,我们需要让`iframe`能够自适应其内容的高度。本文将详细讲解如何使用JavaScript实现`iframe`自适应高度的解决方案,确保在各种主流浏览器中都能正常工作。 首先,理解`iframe`的基本结构和属性是...
为了解决这个问题,我们需要让`iframe`根据其内容自动调整高度和宽度。本篇文章将详细探讨如何实现`iframe`根据页面内容自适应高度和宽度。 首先,我们需要理解`iframe`的基本结构。一个简单的`iframe`标签如下: ...
在本文中,我们将探讨一种巧妙的方法来解决在跨域环境下,使用`iframe`实现窗口高度自适应的问题。问题的核心在于,由于JavaScript的同源策略限制,我们无法在不同域名之间直接进行DOM操作或数据交换。为了解决这个...