在项目开发过程中,我们经常会碰到通过接口返回一个地址,同时在新的tab页面打开一个网址的情况,最直观的想法就是通过window.open(url)的方式,打开一个新的页面,但是大部分浏览器会遭遇拦截。因为大部分现代的浏览器(泛指 Chrome / Firefox / IE 10+ / Safari)都默认开启了阻止弹出窗口的策略,原因是 window.open 被广告商滥用,严重影响用户的使用。这个阻止弹出窗口的操作,并不是直接封杀 windw.open(),而是会根据用户的行为来判断这次 window.open() 是否属于流氓操作。

但是对用户来说,不能要求用户都来通过拦截。何况当出现拦截时,很多小白根本不知道发生了啥,不知道在哪里看被拦截的页面,百思不得其解,因此我们还是要通过代码来解决这个问题。

方式一:jQuery来帮忙

大部分前端开发都对jQuery比较熟悉,所以我们先以jQuery解决这个问题。jquery是提供了模拟click事件的方法的,$(selector).click()。只不过这里我们要注意的是当要触发a标签点击的时候,<a>标签内一定要有内容,并且要模拟里面的内容被点击而不是<a></a>被点击。

jsfiddle代码地址

方式二:HTMLElement.click()

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click

按照文档里面的介绍,HTMLElement.click()是用来模拟click的方法。这种方法的兼容性如下。

PC

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 20[3] (Yes) 5[1] (Yes) (Yes)[2] 6[3]
input@file (limited) (Yes) (Yes) 4 (Yes) 12.10 (Yes)
input@file (full) (Yes) (Yes) 4 (Yes) No support (Yes)

Mobile

Feature Android Chrome for Android Edge Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
Basic support No support ? (Yes) ? ? ? ?

jsfiddle代码地址

方式三:createEvent + initEvent + dispatchEvent

document.createEvent用于创建事件,在DOM Level 2 的事件中就有HTMLEvents,MouseEvents,UIEvents事件类型。

initEvent()方法用于初始化通过DocumentEvent接口创建的Event的值。

dispatchEvent则是触发对应元素上面的某个事件。

参考自stackoverflow

jsfiddle代码地址

最新文章

  1. ViewPager中Fragment切换过程不被销毁的方法
  2. nignx 负载均衡的几种算法介绍
  3. AngularJs自定义指令详解(3) - scope
  4. 关于join算法的四篇文章
  5. 由c#的值类型与引用类型说开去
  6. iOS常见异常Exec_Bad_Access问题解决办法
  7. XML的Schema约束
  8. “采用VS2010至MFC4.2发育”最后溶液
  9. Intel MKL FATAL ERROR: Cannot load mkl_intel_thread.dll
  10. 全网最详细的Windows里Anaconda-Navigator启动后闪退的解决方案(图文详解)
  11. Linux录制、回放和共享终端操作
  12. Python3基础知识之运算符
  13. 1. let 和 const 命令
  14. c# 后台post,包含file文件
  15. 使用git命令行解决冲突
  16. Muse UI 样式
  17. CSV文件读取类
  18. JDK(四)JDK1.8源码分析【排序】DualPivotQuicksort
  19. Linux之执行命令操作20170330
  20. ! Undefined control sequence. \CJK@XXX ...endcsname {`#2}{`#3}\CJK@ignorespaces \fi l.43 \end{document}

热门文章

  1. springmvc 之 DispatcherServlet
  2. [转] DDD领域驱动设计(三) 之 理论知识收集汇总
  3. MVC启动windows身份验证时初次访问特别慢
  4. OFFICE 文档转换为html在线预览
  5. 基于Spring的最简单的定时任务实现与配置(一)
  6. 移动端APP CSS Reset及注意事项CSS重置
  7. PHP中小小的header函数
  8. 数据的ID名生成新的引用索引树
  9. Spring Boot 集成 Mybatis
  10. AngularJS事件