iframe标签之父子元素互访

我们的项目有一个这样的特点,就是顶部,底部,侧栏部分全都是固定的也就是中间部分随着侧栏或顶栏的选择和出现不同的页面,在这种情况下我学习了一个标签,叫做iframe,今天我们来好好研究它。

什么是iframe?

iframe 元素会创建包含另外一个文档的内联框架(即行内框架),也就是说iframe是一个框架,它嵌套在一个页面内部。就像我们的项目,根据选项的不同只需要切换iframe链接的页面而不用换取整个页面,这也就大大的减少了代码量。

iframe的属性

如下图所示:
这里写图片描述
在html代码里经常这样写:

      <iframe id="iframeid" src="XX.html" width="XX" height="XX"></iframe>

这几个相当于是必须的吧,其他的像scrolling,frameborder等需要的时候根据表格属性添加就好了。

父子元素的互访

虽然有iframe标签,但是毕竟是页面里嵌套了另外一个页面,如果父页面要获取iframe标签里子页面的内容,那应该咋办?我们来看看能不能通过dom访问。

<!DOCTYPE html>
<html>
<head>
    <title>iframe</title>
</head>
<body>
    <button id="btn">Click me!</button>
    <p>Hello!this is parent window!</p>
    <iframe id="iframeid" src="./css-sanjiao.html" width="600" height="600"></iframe>
    <script type="text/javascript">
        var iframe =document.getElementsByTagName('iframe')[0];
        console.log(iframe);
    </script>
</body>
</html>

输出是什么结果呢?来我们看看!
这里写图片描述
是这样子的,标签下套了一个html文件,里面的元素再也无法访问。看起来貌似还跨域咧。NO!so easy,就几行代码就OK咧。
父页面:

<!DOCTYPE html>
<html>
<head>
    <title>iframe</title>
</head>
<body>
    <button id="btn">Click me!</button>
    <p>Hello!this is parent window!</p>
    <iframe id="iframeid" src="./css-sanjiao.html" width="600" height="
    600"></iframe>
    <script type="text/javascript">
       var oBtn = document.getElementById('btn');
       oBtn.addEventListener('click',function(){
 alert(document.getElementById('iframeid').contentWindow.document.getElementById('child').innerHTML)},false);
    </script>
</body>
</html>

子页面:

<!DOCTYPE html>
<html>
<head>
    <title>css三角符号</title>
    <style type="text/css">
        #demo {
            width:0;
            height: 0;
            border-width: 20px;
            border-style: solid;
            border-color: transparent transparent red transparent;
        }
        .div1{
            width: 200px;
            height: 200px;
            background: #fff;
            position: relative;
            border:1px solid skyblue;
        }
        .div1:after,.div1:before{
            border:solid transparent;
            content: '';
            height: 0;
            left: 100%;
            position: absolute;
            width: 0;
        }
        .div1:after{
            border-left-color:#fff; 
            border-width: 20px;
            top: 20px;
        }
        .div1:before{
            border-left-color:skyblue; 
            border-width: 22px;
            top: 18px;
        }
    </style>
</head>
<body>
    <div id="child">Hi!this is Child!</div>
    <div class="div1"></div>
    <div id="demo"></div>
</body>
</html>

页面是这个样子的:
这里写图片描述
点击click按钮,弹出子页面中p标签里的内容。如图:
这里写图片描述
下来我们来看看子元素访问父元素的情况:
父页面:

<!DOCTYPE html>
<html>
<head>
    <title>iframe</title>
</head>
<body>
    <p id="father">Hello!this is parent window!</p>
    <iframe id="iframeid" src="./css-sanjiao.html" width="600" height="
    600"></iframe>
</body>
</html>

子页面:

<!DOCTYPE html>
<html>
<head>
    <title>css三角符号</title>
    <style type="text/css">
        #demo {
            width:0;
            height: 0;
            border-width: 20px;
            border-style: solid;
            border-color: transparent transparent red transparent;
        }
        .div1{
            width: 200px;
            height: 200px;
            background: #fff;
            position: relative;
            border:1px solid skyblue;
        }
        .div1:after,.div1:before{
            border:solid transparent;
            content: '';
            height: 0;
            left: 100%;
            position: absolute;
            width: 0;
        }
        .div1:after{
            border-left-color:#fff; 
            border-width: 20px;
            top: 20px;
        }
        .div1:before{
            border-left-color:skyblue; 
            border-width: 22px;
            top: 18px;
        }
    </style>
</head>
<body>
    <div id="child">Hi!this is Child!</div>
    <div class="div1"></div>
    <div id="demo"></div>
    <button id="btn">Click me!</button>
    <script type="text/javascript">
       var oBtn = document.getElementById('btn');
       oBtn.addEventListener('click',function(){
     alert(window.parent.document.getElementById("father").innerHTML);
   });
    </script>
</body>
</html>

效果如图:
这里写图片描述

避免iframe

iframe是迫不得已才使用的,因为iframe会带来较多的问题,有的浏览器甚至可以将iframe当作广告屏蔽。这只是其中的一点缺点就是兼容问题,另外还有许多,比如从用户角度考虑的,从网页框架结构考虑的等等,网上有大批的缺点解析,我就不再一一列举。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值