事件的截获

1.事件截获原理



利用事件的捕获阶段,添加事件。

再利用触发事件元素(e.target)来判断(根据一定的标识或者某些特征)是否是我们需要劫持的dom。

2.具体拦截



这里使用id作为一个判断根据,真实场景中肯定不是这样的。

这里的特征是需要根据一定的规则去寻找的。(这里只是为了演示原理)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>118boys</title>
</head>
<body>

<div style="width: 200px;height: 200px;border:1px solid" id="warp">
    <div style="width: 100px;height: 100px;border:1px solid" id="ok">可疑目标</div>
</div>

</body>
<script type="text/javascript">

    var warp = document.getElementById(‘warp‘),
        dom = document.getElementById(‘ok‘);

    dom.addEventListener(‘click‘, function(){
        console.log("可疑目标")
    },false)

    warp.addEventListener(‘click‘, function(e){

        var e = event || window.event,
            target = e.target || e.srcElement;
        if(target.getAttribute(‘id‘) === ‘ok‘){
            console.log(‘劫持id=ok的dom,成功!‘)
            console.log(‘触发事件元素(e.target)与事件绑定元素(e.currentTarget) :‘ + e.target == e.currentTarget)

            //处理拦截到的可疑目标

        }
    },true)

</script>
</html>

当我们点击可以目标的时候:

3.拦截成功后销毁可疑目标(具体的操作需要对症下药)



这才是我们真正的目的,就是不让要拦截的目标执行!

处理拦截到的可疑目标,提供集中思路:

1.移除目标
target.parentNode.removeChild(target);

2.隐藏可以目标(防止有些注入的js轮询dom节点进行检测)
target.style.display = "none";

3.阻止冒泡事件

e.stopPropagation()也可组织事件的执行。

4.一般注入都是内敛形式绑定的事件(<a onclick=""></a>),这时候只需要判断进行相应的操作即可。

时间: 2024-12-08 13:17:53

事件的截获的相关文章

Android 事件分发机制具体解释

很多其它内容请參照我的个人网站: http://stackvoid.com/ 网上非常多关于Android事件分发机制的解释,大多数描写叙述的都不够清晰,没有吧来龙去脉搞清晰,本文将带你从Touch事件产生到Touch事件被消费这一全过程作全面的剖析. 产生Touch事件 这部分牵扯到硬件和Linux内核部分:我们简单讲述一下这部分内容,假设有兴趣的话能够參考这篇文章. 传递Touch事件 触摸事件是由Linux内核的一个Input子系统来管理的(InputManager),Linux子系统会在

浅谈Qt事件的路由机制:鼠标事件

请注意,本文是探讨文章而不是教程,是根据实验和分析得出的结果,可能是错的,因此欢迎别人来探讨和纠正. 这几天对于Qt的事件较为好奇,平时并不怎么常用,一般都是用信号,对于事件的处理,一般都是需要响应键盘按键事件的时候,也用得毫无问题,因此也没怎么注意过,翻了下一般qt的教材<精通Qt4编程(第二版)>,里面12.1是这么说的. 当用户按下一个鼠标键时,这个事件首先被发给当前拥有焦点的窗口部件. 看到这里,我第一反应是,真的是这样吗,我表示十分地好奇,于是就赶忙试验了一下.代码比较简单,没有注释

Android 事件分发机制详解

更多内容请参照我的个人站点: http://stackvoid.com/ 网上很多关于Android事件分发机制的解释,大多数描述的都不够清晰,没有吧来龙去脉搞清楚,本文将带你从Touch事件产生到Touch事件被消费这一全过程作全面的剖析. 产生Touch事件 这部分牵扯到硬件和Linux内核部分:我们简单讲述一下这部分内容,如果有兴趣的话可以参考这篇文章. 传递Touch事件 触摸事件是由Linux内核的一个Input子系统来管理的(InputManager),Linux子系统会在/dev/

浅谈JavaScript的事件(事件流)

 事件流描述的是从页面中接收事件的顺序.IE的事件流失事件冒泡,而Netspace的事件流失事件捕获. 事件冒泡 IE的事件流叫事件冒泡,即事件开始时,由具体的元素(文档中嵌套层次最深的节点)接收,然后向上传播到不具体的节点. 1 <html onclick="console.log('html')"> 2 <head> 3 <meta charset="UTF-8"> 4 <title></title>

【WPF学习】第十四章 事件路由

原文:[WPF学习]第十四章 事件路由 由上一章可知,WPF中的许多控件都是内容控件,而内容控件可包含任何类型以及大量的嵌套内容.例如,可构建包含图形的按钮,创建混合了文本和图片内容的标签,或者为了实现滚动或折叠的显示效果而在特定容器中放置内容.设置可以多次重复嵌套,直至达到你所希望的层次深度.如下所示: <Window x:Class="RouteEvent.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2

Bootstrap模态框简单学习

前言 单个还是全部引入 插件可以单个引入(使用Bootstrap提供的单个*.js文件),或一次性全部引入(使用bootstrap.js或压缩版的bootstrap.min.js). 不要将两份文件全部引入 bootstrap.js和bootstrap.min.js同样是包含了所有插件.区别是:一个没有压缩,一个进行了压缩. 插件之间的依赖 某些插件和CSS组件依赖于其它插件.如果你是单个引入每个插件的,请确保在文档中检查插件之间的依赖关系.注意,所有插件都依赖jQuery(也就是说,jQuer

消息总线重构之EventBus

本人博客文章如未特别注明皆为原创!如有转载请注明出处:http://blog.csdn.net/yanghua_kobe/article/details/46699205 最近花了不少时间对消息总线进行了重构.重构的重点是在消息总线中加入了Guava的EventBus,并应用于以下两个场景: (1)改进广播通知 (2)业务逻辑串联,用事件驱动替代责任链模式 EventBus简介 EventBus是Google的开源项目Guava里的一个组件,有兴趣的人可以看我前不久的一篇博文解读.总得来说,Ev

C#实现回车实现快捷键功能键的功能

本文实例讲述了C#键盘输入回车键实现点击按钮效果的方法,在C#项目开发中非常具有实用价值.分享给大家供大家参考. 具体实现方法如下: 把Form的KeyPreview设为true 然后设置KeyDown,KeyUp或KeyPress事件.在KeyDown事件中截获. private void FormGongXuJinDu_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.Escape: if (Dia

Bootstrap3.0学习教程十七:JavaScript插件模态框

这篇文章中我们主要来学习一下JavaScipt插件模态框.在学习模态框之前,我们先来了解一下JavaScript插件吧. JavaScript插件概览 插件可以单个引入(使用Bootstrap提供的单个*.js文件),或一次性全部引入(使用bootstrap.js或压缩版的bootstrap.min.js). 不要将两份文件全部引入 bootstrap.js和bootstrap.min.js同样是包含了所有插件.区别是:一个没有压缩,一个进行了压缩. 插件之间的依赖 某些插件和CSS组件依赖于其