`
juforg
  • 浏览: 45771 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

递归 添加 JS 监听 (IE)

阅读更多
废话不多说直接上代码
想直接用

没问题!直接复制到项目里,随你放在哪一层Frame里,那一层所包含的所有Frame--无论是已经加载的,还是需要用户响应才会加载的,只要加载完毕,就给他加上个监听。

我的这段代码只是为了禁用Ctrl+N 键的,所以只用了onkeydown事件,
当然你可以改成其他事件,也可以禁用其他键盘操作。
当然还有缺陷拉,请各位斧正!
只适合IE,没空做兼容
<script language="javascript" type="text/javascript">
	//window.onerror=function(){return false;};//为false时 
</script>	
<script language="javascript" type="text/javascript">
	window.debugflag = true;
	 function keydown(){
 		try{
			if(arguments[0]&&(arguments[0].ctrlKey)&&(arguments[0].keyCode=='78')){
					arguments[0].returnValue=false;
					var d =arguments[0];
					alert('Reject this action! \n\nDocTitle:'+arguments[0].srcElement.document.title);
				}
		}catch(e){
			if(window.debugflag)alert(e.message);
		 }
		}
      document.onreadystatechange = function(){
            if(document.readyState=="complete"){
					addKeyDownListener(window.document);
			}
		}
      function frameonready(){
    	  try {
    	  if(arguments[0]&&arguments[0].srcElement&&arguments[0].srcElement.readyState=="complete"){
				var d = arguments[0].srcElement;
           d.contentWindow.document.attachEvent("onkeydown",keydown);
	      	}
	      } catch (e) {
				if (window.debugflag)alert(e.message);
			}
      }	
      function frameonload(){
    	  try {
        	  alert("onload---\n\nDocTitle:"+arguments[0].srcElement.document.title);
    	 	 if(arguments[0].srcElement.readyState=="complete"){
				var d = arguments[0].srcElement;
               d.document.attachEvent("onkeydown",keydown);
	           if(d.contentWindow!=d.contentWindow.parent){
	           	   addKeyDownListener(arguments[0].srcElement.document);
	           }
      		}
	      } catch (e) {
				if (window.debugflag)alert(e.message);
			}
      }	
	function propertychange(e) {
		try {
			if(e.propertyName=='src'){
            	alert("src change");
            	arguments[0].srcElement.attachEvent("onreadystatechange",frameonready);
                addKeyDownListener(arguments[0].srcElement.document);
            }
		} catch (e) {
			if (window.debugflag)
				alert(e.message);
		}
	}
	function addKeyDownListener(doc) {
		try{
			var len = 0;
			if (doc.frames) {
				len = doc.frames.length;
			}
			if (len > 0) {
				for ( var i = 0; i < len; i++) {
					//alert("frameName:"+doc.frames[i].name+"-- len:"+doc.frames[i].frames.length);
					if(!doc.frames[i].document.keydownEventCount){
						doc.frames[i].document.attachEvent("onkeydown", keydown);
						doc.frames[i].document.keydownEventCount=1;
					}
					var tmpframe = doc.getElementsByTagName("FRAME")[i];
					if(!tmpframe){//如果内嵌的是iframe tmpframe对象就为null
						tmpframe = doc.getElementsByTagName("IFRAME")[i];
						if(!tmpframe.readyEventCount){//判断tmpframe对象是否已定义readyEventCount属性并赋值,若已定义并赋值了,说明就不需要再添加listener
							tmpframe.attachEvent("onreadystatechange",frameonready);
							tmpframe.readyEventCount=1;
						}
					}else 
					if(!tmpframe.loadEventCount){
						tmpframe.attachEvent("onload",frameonload);
						tmpframe.loadEventCount=1;
					}
					addKeyDownListener(doc.frames[i].document);
				}
			}
		} catch (e) {
			if (window.debugflag)
				alert(e.message);
		}
	}
	if (document.attachEvent) {
		document.attachEvent("onkeydown", keydown);
	} else {
		document.addEventListener("onkeydown", keydown, true);
		alert("Warning");
	}
</script>
0
0
分享到:
评论

相关推荐

    js javascript 无限级菜单

    本教程将深入探讨如何使用JavaScript和jQuery创建一个兼容主流浏览器,包括“臭名昭著”的IE6的无限级菜单。 首先,我们需要理解无限级菜单的基本概念。无限级菜单允许用户在多个层次之间导航,这意味着菜单项可以...

    js+asp实现树形结构,选取文本框可以获取树形节点的值

    在JavaScript中,我们可以为文本框添加`click`事件监听器,当用户点击文本框时触发弹出层,然后在弹出层中加载树形结构的页面。 接着,"点击节点的值后文本框可以获取到值"意味着我们需要在树形结构的节点上绑定...

    Firefox浏览器兼容JS脚本

    ### Firefox浏览器兼容JS脚本详解 #### 一、概述 随着Web技术的不断发展与进步,JavaScript作为前端开发的重要组成部分,在不同浏览器之间的兼容性问题显得尤为关键。本文将围绕Firefox浏览器与Internet Explorer...

    适用于任何浏览器的js日历代码

    本文将深入探讨如何使用JavaScript(特别是jQuery库)来创建一个兼容各种浏览器的日历代码,包括IE、Opera、Safari、Firefox和Mozilla。 首先,JavaScript(简称JS)是一种轻量级的脚本语言,广泛应用于网页动态...

    IE关闭主窗口时,同时关闭所有的子窗口

    总结来说,"IE关闭主窗口时,同时关闭所有的子窗口"这个问题是通过JavaScript编程解决的,利用了浏览器提供的API和事件监听机制,实现了一个自定义的窗口管理逻辑。这在开发多窗口交互的应用或者需要控制窗口生命...

    HTML+JS 树型结构

    1. **事件监听**:使用`addEventListener`或`attachEvent`(旧版IE浏览器)添加点击事件监听器,当用户点击某个节点时触发相应的函数。 2. **DOM操作**:通过`document.getElementById`、`document.querySelector`...

    IE内存泄漏检测工具 Drip-0.5

    Drip(Detection of Recursive Leaks in IE,IE递归泄漏检测)是由Microsoft员工Steve Sounders开发的一个轻量级工具,用于检测IE中的JS内存泄漏。Drip-0.5是该工具的一个特定版本,它提供了更为稳定和精确的检测...

    js写的带四级菜单的插件

    2. **事件监听**:使用`addEventListener`或`attachEvent`(对于老版本的IE)为菜单项添加点击事件监听器,当用户点击时触发相应的函数。 3. **CSS样式控制**:通过修改元素的CSS属性,如`display`,可以控制菜单项...

    JavaScript实现树形菜单

    3. JavaScript逻辑处理:利用JavaScript事件监听和DOM操作来实现菜单的动态行为。例如,当用户点击某个节点时,通过改变`style.display`属性来控制子菜单的展开与折叠。同时,可以添加额外的事件监听器处理选中、...

    windows系统自定义多级右键菜单-JS

    本文将深入探讨如何使用JavaScript(JS)来模拟实现Windows系统风格的多级右键菜单,以增强网页应用的用户体验。 一、理解Windows系统右键菜单 Windows系统中的右键菜单通常包含一个或多个主菜单项,每个主菜单项下...

    js中DOM三级列表(代码分享).docx

    3. 事件处理:`onchange`事件监听器,`addEventListener`或`attachEvent`(IE)也可以实现相同功能。 4. 数据结构和递归:使用数组和对象表示多级分类,递归函数处理多级关系。 5. 动态更新DOM:根据用户选择动态生成...

    js树形菜单,完全兼容

    JavaScript(简称JS)是一种轻量级的解释型编程语言,广泛应用于网页和网络应用开发,尤其在客户端渲染和交互方面有着显著的优势。在本话题中,我们主要讨论的是使用JavaScript实现的树形菜单,它是一种常见的用户...

    风声 JS 菜单树 V1.00

    "风声JS菜单树V1.00"是一种基于JavaScript、XHTML和CSS标准的菜单系统,它具有高度的兼容性和灵活性,能够适应各种服务器环境和浏览器类型,包括老旧的IE浏览器到现代的Chrome、Firefox等。这种菜单树设计的目标是...

    javascript 实现的导航树

    2. **事件处理**:JavaScript通过`addEventListener()`或`attachEvent()`(IE浏览器)监听用户行为,如点击事件。当用户点击导航树的某个节点时,可以触发相应的函数来展开或收起子节点。 3. **CSS样式**:配合...

    兼容性非常好的下拉选单JS+css

    通过添加事件监听器和改变DOM元素的样式,可以实现下拉菜单的响应式行为。 2. CSS:CSS则负责下拉菜单的样式设计,包括布局、颜色、字体、过渡动画等。通过合理的布局(如position属性的使用)和适当的伪类选择器,...

    JavaScript 多级联动浮动菜单

    3. **级联展开**:对于多级菜单,我们可能需要递归地处理每一级子菜单。当点击一个菜单项时,不仅要展开当前菜单,还要检查是否有下一级子菜单并相应地处理。 4. **动画效果**:为了提升用户体验,我们可以添加过渡...

    javascript实现仿IE顶部的可关闭警告条

    在实际应用中,你可以根据需求自定义警告条的内容,调整样式,甚至添加更多的交互功能,如添加点击事件监听器,或者更改动画效果。此外,对于现代浏览器,可能需要考虑使用更高级的CSS3属性和JavaScript库来实现更...

    超多树形结构的JavaScript菜单实例

    在这个“超多树形结构的JavaScript菜单实例”中,我们将深入探讨如何利用JS实现灵活、可扩展且兼容各主流浏览器的树形菜单。 首先,树形菜单的基本概念是通过节点和边来构建一个有层次的数据结构。每个节点可以有零...

    javaScript的扫雷代码

    JavaScript,简称JS,是Web开发中的重要组成部分,主要用于网页和网络应用的动态化和交互性。在这里,我们主要探讨如何使用JavaScript来创建一个扫雷游戏。 首先,扫雷的核心逻辑包括以下几个部分: 1. **棋盘生成...

    javascript树型组件可做弹出的树型下拉列表

    JavaScript树型组件是一种常见的前端开发工具,用于在网页中展示层次结构的数据,通常以节点的形式呈现,节点可以展开和折叠,常用于导航菜单、数据筛选和配置选择等场景。在这个特定的案例中,我们讨论的是一款能...

Global site tag (gtag.js) - Google Analytics