美文网首页
iframe的点击事件

iframe的点击事件

作者: 蜗牛Coming | 来源:发表于2019-10-10 17:39 被阅读0次

内容摘抄自:https://www.cnblogs.com/limeiky/p/6632796.html
需求:

点击一个按钮,显示出一个下拉框的效果,点击页面的其他部位,让下拉框隐藏。

如果没有iframe,则可以通过判断点击元素的类名的方式,通过排除方法来实现。
如果iframe在本地,不存在跨域问题,还可以通过在父页面绑定方法来隐藏。

document.getElementById('iframeID').contentWindow.addEventListener('click',clickevent,false);
//tips:
//解绑事件:removeEventListener('click',clickevent,false);
//如果要移除事件句柄,addEventListener() 的执行函数必须使用外部函数,如上面的clickevent
//如果是匿名函数,类似 "document.removeEventListener("event", function(){ myScript });" 该事件是无法移除的。

如果是跨域的,获取不到iframe的document,则还可以通过document.activeElement来实现。

var IframeOnClick = {  
    resolution: 200,  
    iframes: [],  
    interval: null,  
    Iframe: function() {  
        this.element = arguments[0];  
        this.cb = arguments[1];   
        this.hasTracked = false;  
    },  
    track: function(element, cb) {  
        this.iframes.push(new this.Iframe(element, cb));  
        if (!this.interval) {  
            var _this = this;  
            this.interval = setInterval(function() { _this.checkClick(); }, this.resolution);  
        }  
    },  
    checkClick: function() {  
        if (document.activeElement) {  
            var activeElement = document.activeElement;  
            for (var i in this.iframes) {  
                if (activeElement === this.iframes[i].element) { 
                    if (this.iframes[i].hasTracked == false) {   
                        this.iframes[i].cb.apply(window, []);   
                        this.iframes[i].hasTracked = true;  
                    }  
                } else {  
                    this.iframes[i].hasTracked = false;  
                }  
            }  
        }  
    }  
};  

调用的时候:

IframeOnClick.track(document.getElementById("iFrame"), function() { console.log('123') });

tips:
其实这种写法是做了个类似轮循,每隔200ms,就去判断当前页面的activeElement,如果是传入的iframe,并且hasTracked是false,就执行传入的回调函数,并把hasTracked的值置为true;
如果当前的activeElement不是iframe,就把iframe的hasTracked 置为false。

如果activeElement一直是iframe,则回调函数则不再执行,这也就是为什么一直点击iframe,只执行一次的原因。

相关文章

  • iframe的点击事件

    内容摘抄自:https://www.cnblogs.com/limeiky/p/6632796.html需求: 点...

  • iframe监听鼠标点击事件

    需要实现的页面逻辑是: 1. 点击父窗体中按钮,显示侧边栏; 2. 点击页面其他区域(iframe)可以隐藏侧边栏...

  • iframe和html交互

    iframe传递事件给html html传递事件给iframe 刷新浏览器窗口方式

  • 2020-06-06

    iframe调用vue里面事件vue里面: iframe里面调用:

  • 2018-03-05 HTML元素

    1.