关于iframe

iframe一般用来嵌套其他页面来使用

1、如何使用?

<iframe id="iframe1" src="2.html" frameborder="0" width="1000" height="300"></iframe>

src-定义引入的页面地址;width,height-定义iframe宽高;

2、父页面如何跟iframe的子页面通讯?

// 找到iframe元素
var oIframe1 = document.getElementById(‘iframe1‘);
// 获取iframe页面的window对象
var iframe1_window = oIframe1.contentWindow || oIframe1.contentDocument;
document.getElementById(‘btn_html2‘).onclick = function(){
  // 操作iframe上的文档元素
  iframe1_window.document.getElementById(‘div‘).style.backgroundColor = "red";
}

3、被iframe嵌套的字页面如何跟父页面通讯?

被iframe的子页面,可以通过window.parent获取上一级的父页面window对象,如果有多级嵌套,要找最外层的父极时,可以使用window.top找到最外层父极元素。例如:父极元素有对象  var obj = { arr: [] };  然后,子页面想操作修改arr值:

// 给top最外层父页面赋值
document.getElementById(‘btn3_html3‘).onclick = function(){
    window.top.obj.arr = [1,2,3];
}

4、上面赋值没问题,但是如果你在父页面用 instanceof 对arr做数组检测,会出问题

当3中赋值完后,在父页面对arr做检测:

console.log(obj.arr instanceof Array);

结果会返回 false,问题来了,明明是一个数组为什么给到父页面却不认识是一个数组了?

原因是:instanceof 操作符,它假定单一的全局执行环境,如果网页中包含多个框架,那实际上就存在多个不同全局执行环境,从而存在多个不同版本的Array构造函数,如果从一个框架向另一个框架传入数组,那传入的数组与第一个框架原生创建的数组分别具有各自不同的构造函数。

在ES5中,为了解决这个问题,实现了 Array.isArray(值) 的方法,确定某个值是否是数组,而不管他是哪个全局执行环境中实现的。但IE8及以下不支持该方法。终极解决办法:

Object.prototype.toString.call([]);    // 返回"[object Array]"

5、有时候,山寨、钓鱼网站会用iframe的这种形式欺骗用户,如何禁止被其他网站使用嵌套自己网站?

if(window.top != window){
    window.top.location.href = "xxx.html";
}

如果 window.top != window 就跳回到自己的页面。

时间: 2024-10-07 11:16:28

关于iframe的相关文章

跨域cors方法(jsonp,document.domain,document.name)及iframe性质

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对 http://store.company.com/dir/page.html 同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 1.通过jsonp跨域[解决ajax跨域] 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的

iframe中的模态框遮罩父窗口原理

关键点: css的position定位为fixed或absolute css的z-index, 最顶层的值最大如遮罩层为0那么弹出框最好是大于等于1的整数,总之记住弹出层要比遮罩的z-index值大就行 如果弹出模态框的使用场景没有嵌套在iframe或frame中掌握以上两点加上点css功底就可以写出漂亮的模态框了 特殊场景会涉及到跨域问题,可以在父页面和子页面分别设置<script type="text/javascript">document.domain="

selenium查找动态的iframe的name

WebElement frame1 = driver.findElement(By.xpath("/html/body/div[9]/div[2]/div/iframe"));driver.switchTo().frame("frame1"); 不能使用by.name,是动态显示的.

iframe跨域访问

js跨域是个讨论很多的话题.iframe跨域访问也被研究的很透了. 一般分两种情况: 一. 是同主域下面,不同子域之间的跨域: 同主域,不同子域跨域,设置相同的document.domian就可以解决; 父页访问子页,可以document.getElementById("myframe").contentWindow.document来访问iframe页面的内容:如果支持contentDocument也可以直接document.getElementById("myframe&

js 滚动加载iframe框中内容

var isIE6 = !!window.ActiveXObject&&!window.XMLHttpRequest; //滚动加载 var scrollLoad =function(){ $("#content iframe[_src]").each(function(){ var t = $(this); if( t.offset().top<= $(document).scrollTop() + $(window).height() ) { t.attr(

C#操作iframe

<iframe id="cl" name="clf" src="xianshi.aspx" runat="server"  frameborder="0"></iframe> protected void LinkButton1_Click(object sender, EventArgs e) { cl.Attributes["src"] = "htt

easyUI的iframe子页面操作父页面元素

曾经试过这样的方法 在iframe子页面获取父页面元素       代码如下:       $('#objId', parent.document); 这样可以获得父页面的元素,但是调用EasyUI的方法的时候,就会报错. 郁闷了很久很久,最终找到方案,写法的区别,如下: parent.$('# objId') 这样调用方法就不会报错 如: parent.$('# objId').tabs("add", { title: title, content: content, closabl

Js动态获取iframe子页面的高度总结

问题的缘由 产品有个评论列表引用的是个iframe,高度不固定于是引发这个总结. 方法1:父级页面获取子级页面的高度 给元素设置高度 这方法是用在父级页面里的,通过获取子级页面的高度给iframe设置高度 涉及了一些兼容问题: IE用attachEvent | 3C用onload来判断子页面是否加载完成. IE用contentWindow | 3C用contentDocument来获取子页面 IE用document.documentElement.scrollHeight(兼容ie6 ie7)|

谷歌、火狐浏览器下实现JS跨域iframe高度自适应的完美解决方法,跨域调用JS不再是难题!

谷歌.火狐浏览器下实现JS跨域iframe高度自适应的解决方法 导读:今天开发的时候遇到个iframe自适应高度的问题,相信大家对这个不陌生,但是一般我们都是在同一个项目使用iframe嵌套页面,这个ifame高度自适应网上一搜一大把,今天要讲的如何在不同的网站下进行相互的调用跟在同一个网站下是一个效果:例如我在自己的项目里面Iframe  了第一博客的页面  http://www.diyibk.com/   当第一博客的页面高度变化了怎么通知父页面呢? 这个时候在谷歌下肯定是拿不到 ifram

解决 swiper插件 嵌入 iframe 不能滑动问题

iframe里是另一个网页,所以swiper检测不到内页的事件. 方法一:直接设置样式  pointer-events: none; 但iframe里面所有事件将不能点击包括 a链接 方法二:自己动手写内页事件检测,然后改变swiper,这个一定是在js的同源策略下才能进行.直接上代码... var self = this; var isMove,pageX,poor,moveArr; var iframe = document.querySelector('#myiframe'); var w