加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
hash-test.html 1.34 KB
一键复制 编辑 原始数据 按行查看 历史
大大大大贝壳 提交于 2015-04-20 16:31 . first commit
<meta charset="utf-8">
<script type="text/javascript">
var i=0;
var mCheckMap = {}; //存储已扫描过的事件
var mCheckID = 0;
for (var k in document) {
if (/^on./.test(k)) {
hookEvent(k,i++)
console.log('遍历事件: '+k+',事件ID: '+i)
}
}
function hookEvent(eventName,eventID){
document.addEventListener(eventName.substr(2),function(e){
scanElement(e.target)
},true);
function scanElement(el){
flag=el['_k']
if(!flag){
flag=el['_k']=mCheckID++;
}
hash=(flag << 8) | eventID;
if(mCheckID[hash]){
return ;
}
mCheckID[hash]=true
}
}
function hookEvent(eventName, eventID) {
document.addEventListener(eventName.substr(2), function(e) {
scanElement(e.target);
}, true);
function scanElement(el) {
// 跳过已扫描的事件
var flag = el['_k'];
if (!flag){ //如果尚未扫描,分配_k,也为当前检测的数量
flag = el['_k'] = ++mCheckID;
}
var hash = (flag << 8) | eventID; //获得HASH值,因为flag不会相同,所以不同对象的Hash值也不会相同
if (hash in mCheckMap) {
return;
}
console.log(mCheckMap)
mCheckMap[hash] = true;
}
}
</script>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化