<a id="alink" href="abc.aspx" style="visibility: hidden;">下一步</a>
$("#alink").click(); // 触发了a标签的点击事件,但是没有触发页面跳转
document.getElementById("alink").click(); //既触发了a标签的点击事件,又触发了页面跳转

把 “下一步” 改为 “<span id="spanId">下一步</span>” 即给A标签中的文字添加一个能被jQuery捕获的元素,然后$("#spanId").click();,才可以触发页面跳转。



原文:不被浏览器屏蔽拦截的打开窗口的方法


之所以会想要写这篇文章,是因为我在最近的项目中使用Js打开新的窗体时被拦截了,因此,让我产生了对浏览器拦截屏蔽新窗体的兴趣,想了解一下为什么会被拦截。

说到在新的窗口打开新的网页,通常是使用超链接标签的target ,_blank实现。当点击了超链接时可以自动的打开新的窗口,但是实际上,需要在执行了某些操作之后通过JS的方式打开。 而通过JS的方式打开方式比较常用的就是通过window.open 打开新的窗口。这里说明一下,在通常情况下,使用window.open的方法,是不会被浏览器的屏蔽拦截,只有在恶意弹窗的时候,才会被屏蔽。当用户进行点击触发打开的窗口,是能被浏览器接受的。网络上有很多文章说什么“强制弹窗”,“不会被拦截”,我看了一下,觉得该屏蔽的还是会屏蔽,我想定个时间,让它自动弹窗,还是不行。我分析一下他们的原理,一种是通过超链接,在js中click()触发,另一种是使用js通过form的submit()触发,但是这不能绕开浏览器的屏蔽。因为他们的原理是一样的,不是用户即时触发的。浏览器很容易就能发现和阻止。
人们常说的会被浏览器拦截主要是因为不是由用户发生的操作打开的窗口,包括定时器,ajax异步执行之后等发生的打开窗口的操作。但是比不是所有的浏览器会拦截。经过本人对各大浏览器的测试,非用户触发操作弹窗,遨游通过,ie通过 ,猎豹不通过 ,chrome不通过,360浏览器不通过,火狐不通过。一般正常的操作是不会被屏蔽的,但是恶意弹窗很容易被浏览器识别,如果想不经过用户触发,直接弹窗,只能期待用户是使用IE和遨游浏览器的。
现在总结一下,常见正常弹出窗口失效的原因: 1.使用window.open,但是定义窗口名,也就是在打开窗口传入name参数,因为window.open只能打开唯一的窗体名为name的窗体。所以有些人会以为被浏览器拦截屏蔽了。 2.使用异步的ajax,通过ajax向服务器请求,在请求完成后再打开窗口的操作,如果是使用异步的方式,将出现延时,这是浏览器就会以为不是用户触发的操作,这时只要设置同步的方式即可。笔者就是因为这个原因。
可能存在替代方案: 既然想到弹窗,固然是因为有这方面的需求,目前‘浏览器无法拦截的弹出窗口’是不可能的,能不能找到替代方案。这里提供两个方案: 1.如果是弹窗广告,一般的做法是在页面document绑定click事件或者的srcoll事件,因为一般打开网页都会点一下或者是滚一下鼠标。所以就很容易的弹窗了(这里以技术出发,笔者代表绝大部分用户不接受这种广告方式)。 2.如果是弹出通知信息,就更容易,不用这么鬼鬼祟祟了,直接弹出div的“窗口就行”。
如果有这方面的需求的,看到这篇文章应该会或多或少的有所收获,如果找不到解决方案,请给我留言,希望能够共同探讨。

更多相关文章

  1. 关于INPUT的autocomplete="off" 属性(浏览器表单默认的记忆功能)
  2. html 加上readonly后在各种浏览器的差异。
  3. html中显示div的时候,超出浏览器的宽,怎么解决,在线等!!!
  4. 我无法在某些Web浏览器中输入我的注册文本字段
  5. (转)让所有浏览器支持HTML5 video视频标签
  6. 解决FCKEditor编辑器在浏览器返回时显示html源代码的问题
  7. 解决html代码中插入的图片在浏览器中不显示的办法
  8. j2ee的web项目,有最终的html代码(即f12看到的最终给用户浏览器展示
  9. 去除Chrome浏览器文本框边缘的黄线

随机推荐

  1. Android 应用框架 —— 组件
  2. @BindView问题 Attempt to invoke virtua
  3. Android(安卓)Vibrate
  4. Android大事记
  5. Android下uid与多用户释疑
  6. Android应用于军事制造业,开放性优势受青
  7. android wifi设置
  8. Android(安卓)Binder 机制初步学习 笔记(
  9. Android(安卓)开发中C++链接C库
  10. Android Studio共用Eclipse的Android项目