今天,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. [DNS-BIND]网络初始化

    1.创建ns_g_socketmgr: 首先,套接字管理器是全局唯一的,与有多少个网络接口无关,全局变量定义在/bin/named/include/named/globals.h: EXTERN is ...

  2. a链接的四种状态

    四种状态:hover.link.active.visible a:link{color:#fff;} a链接初始化 a:hover{color:yellow;} 把鼠标放上去的状况 a:active{ ...

  3. SharePoint 2013 CSOM 对象模型属性包

     博客地址:http://blog.csdn.net/FoxDave 虽说是翻译,但是并没什么翻译的,主要内容就是说有一些能通过Server API配置的Site/Web属性在CSOM中找不到,其 ...

  4. PHP往mysql数据库中写入中文失败

    该类问题解决办法就是 在建立数据库连接之后,将该连接的编码方式改为中文. 代码如下: $linkID=@mysql_connect("localhost","root&q ...

  5. 如果需要将UIView的4个角全部都为圆角,做法相当简单,只需设置其Layer的cornerRadius属性即可

    如果需要将UIView的4个角全部都为圆角,做法相当简单,只需设置其Layer的cornerRadius属性即可(项目需要使用QuartzCore框架).而若要指定某几个角(小于4)为圆角而别的不变时 ...

  6. 上传文件swfUploadConfig.js

    /*/* * Unobstrusive swf upload widget using jQuery. *example : $(':file.uo_widget_form_input_file_sw ...

  7. css声明应用优先级

    1.特殊性 选择器的特殊值由四部分组成:0,0,0,0 第一位预留给内联样式   <h1 style="color:red;"></h1> 第二位属于ID选 ...

  8. C# 的各种排序

    http://www.cnblogs.com/jiajiayuan/category/302446.html

  9. Send Push Notifications to iOS Devices using Xcode 8 and Swift 3, APNs Auth Key

    Send Push Notifications to iOS Devices using Xcode 8 and Swift 3 OCT 6, 2016 Push notifications are ...

  10. 问题:C++形参默认值为什么一定要放在最后?

    问题:C++形参默认值为什么一定要放在最后? 1.会出现歧义! 2.从汇编角度看是怎么回事?   待解答!!