zoukankan      html  css  js  c++  java
  • html,获取iframe的window,document,自定事件与iframe通信

     
    获取iframe的window对象js代码如下.注意:一定要在文档加载完成之后,才能获取到
    var Iframe=document.getElementById("script");//先获取到iframe元素
    var iframeWindow=(Iframe.contentWindow || Iframe.contentDocument);//获取到指定iframe下window

    对应html代码:

    <iframe  class="Panel" id="script" src="t.html"></iframe>

    以上代码就能实现获得页面中iframe的window对象

    现在实现iframe和父页面通信,

    page1(为iframe页面代码):

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset=utf-8" />
        <title>By:DragonDean</title>
        <script src="jquery.js"></script>
        <script type="application/javascript">
           window.onload=function(){
                window.evt=document.createEvent('Event');//创建一个事件,挂在当前页面的window对象上
                window.evt.initEvent('myEvent',true,true);//初始这个事件
                var obj=document.getElementById('testBtn');
                obj.addEventListener('click', function(){//自定义事件触发的条件,例子中用的点击
                    window.evt.test='测试iframe之间用事件传数据';//测试传值
                    window.dispatchEvent(window.evt);//让自定义事件触发
                }, false);
        console.log(parent);//父页面的window对象,iframe嵌入页面自带
        };
      
    </script></head> <body> <button id="testBtn">test</button> </body> </html>

    page2(主页面):

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <script>
         window.onload=function(){
             var Iframe=document.getElementById("script");//先获取到iframe元素
             var iframeWindow=(Iframe.contentWindow || Iframe.contentDocument);//获取到指定iframe下window
             /*在主页面对iframe页面的window上添加一个监听事件,监听自定义事件,传入一个当前页面的函数,获取iframe触发的事件*/
             iframeWindow.addEventListener('myEvent',function(event){//event为t.html中触发这个监听的window.evt事件
                 console.log(event.test);//到此,传值完成
             })
         }
        </script>
    </head>
    <body>
    <iframe  class="Panel" id="script" style="height: 1000px;" src="page1.html" name="script"></iframe>
    </body>
    </html>

    将两个页面放同目录下,运行page2,呼出控制台,就能看到传值结果。

  • 相关阅读:
    开源高性能网络库Libevent的简介
    网络IO之阻塞、非阻塞、同步、异步总结【转】
    C语言20150620
    EF那点事
    SSO单点登录的实现原理是怎样的
    SQL索引器
    基础数学知识
    hibernate优化笔记(随时更新)
    JAVA中保留小数的多种方法
    Hibernate的session缓存和对象的四种状态
  • 原文地址:https://www.cnblogs.com/v-weiwang/p/4915098.html
Copyright © 2011-2022 走看看