如题:在工作中遇到问题。主页面发出事件,该页面中嵌入的iframe的页面也要响应该事件操作。例如主页面登录后,该页面加载的iframe页也要根据登录情况作出不同的显示。

主页面

<!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><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>主页</title><script src="base.js" language="javascript"></script><script>function callsub(){    CliBase.getInstance().dispatchEvent( new Event('testcall','success'));}function testhandler(e){    alert("来自主页面的:"+e.args)}CliBase.getInstance().addEventListener('testcall',testhandler)</script></head><body>主页面<a href="javascript:callsub();">呼叫子页面</a><iframe  id="aa" src="sub.html" height="500" width="100%" ></iframe></body></html>

子页面

 <!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><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>subpage</title><script src="base.js" language="javascript"></script><script>window.onload = function(){if(window.parent!=null){    CliBase.getInstance().addEventListener('testcall',testhandler);}}function testhandler(e){    document.getElementById("output").innerHTML="来自子页面的"+e.args;}</script></head><body>ifamre中的页面<div id="output" align="ouput"></div></body></html>

// JavaScript Documentfunction Event(type,args){this.type = type;this.args = args;}/*** @author andypan* 操作基类*/var CliBase = (function() {                      var _eventList = new Array();    var uniqueInstance; // Private attribute that holds the single instance.    // Return the constructor.    return function() {      // implements Publication    this.getEventList = function() {return _eventList;}}})();CliBase.prototype.addEventListener = function(EventType,handler){    this.getEventList().push([EventType,handler]);}CliBase.prototype.removeEventListener = function(EventType,handler){    for(var i=0;i<this.getEventList().length;i++){        if((EventType==this.getEventList()[i][0])&&(handler==this.getEventList()[i][1])){            this.getEventList().splice(i,1);        }    }}CliBase.prototype.dispatchEvent = function(Event){    for(var i=0;i<this.getEventList().length;i++){        if(Event.type==this.getEventList()[i][0]){            this.getEventList()[i][1](Event);        }    }}CliBase.getInstance = function(){    if(this.instance ==null) this.instance = new CliBase();    if(window.parent!=window){        //子页面被实例化后,替换现有实例        this.instance = window.parent.CliBase.getInstance();    }    return this.instance;}

关键就是 this.instance = window.parent.CliBase.getInstance(); 这一句 可以将它做成循环一定次数。这样就可以保证多层次结构的页面都可以同时响应事件了。

JS 实现跨页事件响应相关推荐

  1. js实现跨页勾选复选框

    在这里插入代码片# 前台列表页面实现跨页勾选复选框 思路:分页是后台服务端分页.做不到实时性.所以在js中可以封装一个js Map,每勾选一个将勾选的主键放到Map中,取消勾选时将其从Map中移除.不 ...

  2. js打印跨页怎么让底部留下空白_如何让背单词看得见,摸得着?「纸记卡片 Paper MEMO」上线!自动生成可打印、裁剪的记忆卡片集...

    项目地址: 体验网址:https://uniquelab.cn/ppmemo 短网址:https://xd.sh.cn/pm 项目博客地址:react 网页应用「纸记卡片 Paper MEMO」 闪记 ...

  3. ocx js php,JS实现OCX控件的事件响应示例_javascript技巧

    JS支持OCX控件的事件(event),当OCX控件定义的事件发生时,JS可以捕获该事件并对事件进行相应的处理. 个人理解,其实就是事件的响应由谁来完成,OCX控件自身肯定是可以实现的,JS提供的这种 ...

  4. 【前端】跨浏览器事件处理程序EventUtil.js个人注释及详解

    <javascript高级程序设计>跨浏览器事件处理程序EventUtil.js个人注释 EventUtil.js // 跨浏览器事件处理程序封装 var EventUtil = {// ...

  5. ocx js php,JavaScript_JS实现OCX控件的事件响应示例,JS支持OCX控件的事件(event), - phpStudy...

    JS实现OCX控件的事件响应示例 JS支持OCX控件的事件(event),当OCX控件定义的事件发生时,JS可以捕获该事件并对事件进行相应的处理. 个人理解,其实就是事件的响应由谁来完成,OCX控件自 ...

  6. ASP.NET跨页传值方法汇总

    方法一:问号传值(Response.Redirect方法) 1:源页:在按钮的点击事件程序中写入Response.Redirect方法,在其中使用问号传值.如: Response.Redirect(& ...

  7. JS高级程序设计笔记——事件(一)

    一.事件流 假设有如下HTML代码: <!DOCTYPE html> <html> <head><title>Event</title> & ...

  8. 怎么更好掌握Web前端技术?JS的跨域是怎么回事?

    怎么更好掌握Web前端技术?JS的跨域是怎么回事?JavaScript跨域是指通过JS在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过JS获取页面中不同域的框架中(if ...

  9. layui表格中开启复选框后,怎么获取跨页勾选的全部数据,layui表格获取勾选的所有数据,获取跨页勾选数据的数量,如何预渲染让数据默认勾选上?

    这个功能layui 本身可能没直接提供给我们相关的功能  ,需要自己写出来了  有几个疑点  可能要一一排查出来 核心点: 能不能有一个状态值 能判断当前行的数据 是否是勾选状态 然后就可以 一步一步 ...

最新文章

  1. java冒泡排序_Java中的经典算法之冒泡排序(Bubble Sort)
  2. Nature 子刊:加州大学Banfield组揭示CPR细菌和DPANN古菌多样性及与低温TEM下宿主互作关系...
  3. chineseocr
  4. Python多线程学习教程
  5. JAVA中“==”与equals()方法区别
  6. curl命令java_Java 应用线上问题排查思路、工具小结
  7. 2021CCPC华为云挑战赛:HDU 7091 重叠的子串(SAM + 线段树合并)
  8. 去除文件头部的u+feff_关于FEFF的简短故事,一个不可见的UTF-8字符破坏了我们的CSV文件
  9. centos7下python3与python2共存并且开启py3虚拟环境
  10. thymeleaf(th:each th:selected) 从后台动态获取下拉框数据回显及选中
  11. gets函数用不了_函数篇:指数函数
  12. 撞击测试软件,碰撞检测用什么软件?你会用Navisworks做碰撞检测吗?
  13. mysql中join各种形式大全及操作和图片
  14. Refactoring Game Entities with Components
  15. 安装java没有jdk_安装Java 环境 JDK 最完整配置方法
  16. Tecplot 360 EX 2019 安装教程
  17. 简单计算机硬件知识ppt,计算机硬件知识教程课件.ppt
  18. 影响世界的100条管理励志名言
  19. Keil_MDK 中绝对地址定位问题
  20. 软件测试 | 测试开发 | Git分支管理搞定在线合并和本地合并

热门文章

  1. 互联网金融的信息安全(二)安全需求
  2. CCF认证考试题解目录(持续更新)
  3. 哈佛计算机科学专业大一新生的一天,哈佛大一新生的一天丨高效的时间管理者,学习就是休息~...
  4. BIOS学习实战之SMBIOS
  5. 计算机类对口高职考试内容,对口高职计算机专业考试试题.doc
  6. 对上一篇文章例8.25中的学生,找出其中有不及格的课程的学生及其学生号。
  7. PC端调用摄像头并拍照
  8. 庄懂的技术美术入门课(美术向) Lesson1
  9. 微信将于12日退出苹果iOS系统?腾讯官方回复了...
  10. python3 zipfile_Python之zipfile模块的使用