今天,2012-2-22,是个很二的日子,遇到了一个诡异的问题~~

下午收到一封信。

from:someone@ctrip.com
to:小灰灰
title:被挡住的iframe也能接收到点击事件小灰灰,今天开发的时候遇到了一个很怪的问题。页面中有一个iframe和一个弹出层。
iframe中是一个可以点击的广告。弹出层挡在iframe上方,当点击iframe中的“hide me”, 虽然层隐藏了,但是同时也触发了iframe中图片的点击,会弹出广告。这个情况只有IE下才会出现。有没有办法可以阻止这个点击?

—————————————————————————

于是我模拟了一个页面,地址:http://4.feifeipan59.sinaapp.com/blog/iframe.html

当点击“hide me”时,弹出层会关闭,但是同时会触发下面的广告点击。

首先,考虑到是不是这个弹出层的层级太低,所以设置了z-index,但是无效。在继而尝试setCapture、cancelBubble、returnValue=false都失败了。

因为问题是IE引起的,所以以下解决方案请在IE下看。

方法一

分析了一下,iframe中的A链接应该在弹出层隐藏的一瞬间仍然被点击到了。
在点击“hide me”时,用一个div盖住广告,然后延迟把这个div隐藏。这个方法也可行,但是一定要在onclick的事件中触发,因为mousedown的时间比click早,所以仍然会触发iframe中的A的点击事件。

地址:http://4.feifeipan59.sinaapp.com/blog/iframe_b.html

方法二

因为Iframe中的有一个链接A,而弹出层中也是链接A。应该是A链接的触发引起的,经过尝试,发现如果将A的href删除,那么也不会出发iframe中的点击。所以可以在点击链接的时候,删除A的href,然后再将href恢复成原本的值。

地址:http://4.feifeipan59.sinaapp.com/blog/iframe_c.html

方法三

尝试之后发现,如果iframe不是跨域的情况,那么就不会触发。

地址:http://4.feifeipan59.sinaapp.com/blog/iframe_d.html

后续:翻查过一些资料,但是没有找到这个问题的根本原因。不过以上的方法可以解决这个诡异的问题。

如果有了解的朋友,也欢迎一起讨论。

本文作者:小灰灰 转载请注明来自:携程UED

IE下被遮住的iframe能接收事件的更多相关文章

  1. ie7下div覆盖在iframe上方,ie8就不行,怎么解决

    <div style="position:relative;display:inline-block;width:178px;height:90px;z-index:9999;top: ...

  2. 用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)

    本文讲述使用Senparc.Weixin框架来快速处理各种接收事件推送.这里的消息指的是传统的微信公众平台消息交互,微信用户向公众号发送消息后,公众号回复消息给微信用户.包括以下类型: 1 subsc ...

  3. C#微信公众号开发系列教程五(接收事件推送与消息排重)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  4. 微信公众号开发C#系列-7、消息管理-接收事件推送

    1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...

  5. 转:C#微信公众号开发之接收事件推送与消息排重的方法

    本文实例讲述了C#微信公众号开发之接收事件推送与消息排重的方法.分享给大家供大家参考.具体分析如下: 微信服务器在5秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次.这样的话,问题就来了.有这 ...

  6. window/body/img/iframe 的onload事件

    在html页面中,只有body,img,iframe这一类标签具有onload事件. onload事件表示在当前元素载入完成后发生的事件.其中,window也有onload事件,但是跟body的是同一 ...

  7. 关于IFRAME的onload事件

    昨天遇到一个关于iframe的问题,比如a页面中嵌入了一个iframe称为a_iframe,如果直接在a_iframe的标签上直接加入属性的设置,onload=’’,这样才onload事件才是起作用的 ...

  8. 从零开始学习Node.js例子六 EventEmitter发送和接收事件

    pulser.js /* EventEmitter发送和接收事件 HTTPServer和HTTPClient类,它们都继承自EventEmitter EventEmitter被定义在Node的事件(e ...

  9. Delphi Socket 阻塞线程下为什么不触发OnRead和OnWrite事件

    //**********************************************************************************//说明: 阻塞线程下为什么不触 ...

随机推荐

  1. 使用CSS3动画模拟实现小球自由落体效果

    使用纯CSS代码模拟实现小球自由落体效果: html代码如下: <div id="ballDiv"> <div id="ball">&l ...

  2. MYSQL单双向同步

    Master:192.168.1.101 Slave  :192.168.1.102 单向同步(一) 进入Master启动MYSQL [root@localhost ~]# service mysql ...

  3. GCHandler的使用

    众所周知,我们在使用c#托管代码时,内存地址和GC回收那不是我们关心的,CLR已经给我们暗箱操作. 但是如果我们在c#中调用了一个非托管代码,比如vc的DLL,而且他有个回调函数,需要引用c#中的某个 ...

  4. How to upgrade Subversion on OSX

    How to upgrade Subversion on OSX http://andowebsit.es/blog/noteslog.com/post/how-to-upgrade-subversi ...

  5. 从UWP到SWIFT-开始

    hi,all 我呢,是一个win10 uwp的开发者,从wp7.wp8.wp8.1.win8.1 到现在的win10,一直在windows阵营,做过一些大家比较熟悉的东西现在也还是在做win10的uw ...

  6. UE4 创建进程,打开额外程序 方法 笔记

    FPlatformProcess::CreateProc(TEXT("程序路径");

  7. 深入理解css系列:css定位

    一.概述 1.默认文档流定位方式 (1).HTML默认文档以流模式定位,即内容元素按照先后顺序依次上下定位: (2).HTML标签元素总体分为块状元素.内联元素.内联块状元素,可通过该标签对应的DOM ...

  8. c++ 泛型编程及模板学习

    泛型编程,英文叫做Generic programming 可以理解为,具有通用意义的.普适性的,编程. 比如,你要实现一个函数去比较两个数值的大小,数值可能是int或者string.初次尝试,我们直观 ...

  9. MSSQL—按照某一列分组后取前N条记录

    以前在开发的时候遇到过一个需求,就是要按照某一列进行分组后取前几条数据,今天又有同事碰到了,帮解决了之后顺便写一篇博客记录一下. 首先先建一个基础数据表,代码如下: IF OBJECT_ID(N'Te ...

  10. HashPasswordForStoringInConfigFile中的Md5算法并非常用的Md5算法

    今天在开发一个软件时,同时在B/S版和C/S版中都要用到MD5加密,在ASP.NET中使用的是 /**//// <summary>    /// 取得MD5加密串    /// </ ...