在js中,需要监听iframe的点击事件,但是因为浏览器的同源策略,是无法监听到的,只能另辟蹊径去解决它 注意,仅限于pc网站,意思就是必须要有鼠标移入移出iframe的操作<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html charset=ISO-8859-1"> <title>Detect IFrame Clicks</title> <script src="./jquery-3.4.1.min.js"></script> <script type="text/javascript"> $(document).ready(function() { var currentObj=Object var isOverIFrame = false function processMouseOut(e) { console.log('out iframe',e.target) currentObj=e.target isOverIFrame = false top.focus() } function processMouseOver(e) { // log("IFrame mouse >> OVER << detected.") console.log('in iframe',e.target) currentObj=e.target isOverIFrame = true } function processIFrameClick(event) { if(isOverIFrame) { console.log('click iframe',event.target,currentObj) } } function attachOnloadEvent(func, obj) { if(typeof window.addEventListener != 'undefined') { window.addEventListener('load', func, false) } else if (typeof document.addEventListener != 'undefined') { document.addEventListener('load', func, false) } else if (typeof window.attachEvent != 'undefined') { window.attachEvent('onload', func) } else { if (typeof window.onload == 'function') { var oldonload = onload window.onload = function() { oldonload() func() } } else { window.onload = func } } } function init() { var element = document.getElementsByTagName("iframe") for (var i=0 i<element.length i++) { element[i].onmouseover = processMouseOver element[i].onmouseout = processMouseOut } if (typeof window.attachEvent != 'undefined') { top.attachEvent('onblur', processIFrameClick) } else if (typeof window.addEventListener != 'undefined') { top.addEventListener('blur', processIFrameClick, false) } } attachOnloadEvent(init) }) </script> </head> <body> <iframe src="https://www.hao123.com" width="80%" height="600px"></iframe> <iframe src="https://www.baidu.com" width="80%" height="600px"></iframe> </form> </body> </html>复制上边整段html,打开console控制台,即可解决这个问题,亲测好用
1、事件监听的定义
在Javascript中,浏览器一般分为两大类:
① 基于IE内核的浏览器(版本号小于9的IE浏览器)
② 基于W3C内核的浏览器(版本号大于9的IE浏览器、Firefox、Google等浏览器)
1)基本语法:基于IE内核浏览器
dom对象.attachEvent(type,callback,capture) :为元素绑定事件监听程序
参数说明:
type:绑定的事件类型,如onclick、onmouseover、onmouseout
callback:事件的处理程序,通常是一个匿名函数
capture:使用的浏览器模型,冒泡模型与捕获模型,默认IE8以下的浏览器只支持冒泡模型!
2)基本语法:基于W3C内核的事件监听
dom对象.addEventListener(type,callback) :为W3C内核浏览器绑定事件监听
参数说明:
type:绑定事件类型,不带’on’前缀,如click,mouseover,mouseout
callback:事件的处理程序,通常是一个匿名函数
3、总结事件监听的区别
IE内核的监听方式与W3C内核的监听方式:
①方式不同
IE内核的浏览器使用attachEvent进行绑定
W3C内核的浏览器使用addEventListener进行绑定
②参数不同
IE内核浏览器,其绑定方式一共有三个参数type,callback,capture(使用的浏览器模型)
W3C内核浏览器,其绑定方式一共有二个参数,type和callback
③type参数不同
IE内核的浏览器,type是需要添加’on’前缀的,如onclick
W3C内核浏览器,type是不需要添加’on’前缀的,如click
④触发顺序不同
IE内核的浏览器,其事件监听是先绑定后触发,后绑定的先触发
W3C内核的浏览器,其事件监听是先绑定先触发,后绑定的后触发