js中监听iframe点击事件

在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控制台,即可解决这个问题,亲测好用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,068评论 0 2
  • 作者:codeXiu 来源:掘金 事件流 事件流一共由三个阶段分别是: 1.捕获阶段 2.目标阶段 3.冒泡阶段 ...
    强哥科技兴阅读 535评论 0 1
  • 北京2018年4月1日上午,NBA常规赛勇士客战国王的比赛中,发生了令人痛心不已的一幕。比赛进行到第三节还有41...
    Curry_宇阅读 1,281评论 1 1
  • 什么是事件: 我们可以简单的把事件理解为浏览器的感知系统。比如说:他可以感觉到用户是否点击(click)了页面、鼠...
    张松1366阅读 6,867评论 1 6
  • Call 和 Apply 的区别 语法:function.call(thisObj [, arg1[, arg2[...
    他方l阅读 332评论 0 0