为什么要做这个东西

最近做一个需求,前端请求一个接口,后台生成文件以后返回文件名,前端再通过window.open下载这个文件。发现window.open有时生效有时不生效,后来查阅资料后发现浏览器出安全方面的考量,会把用户操作完页面后一段时间内的window.open视为非法操作屏蔽掉,这个时间后来经过测试大概是五秒;如果接口请求比较耗时就会导致open被屏蔽。这里封装一个函数,用户操作完页面4.5秒后请求没有完成时先执行window.open,接口请求完成后替换新窗口的url完成文件下载。如果在4.5秒内请求完成了就直接执行window.open

代码

function asyncOpenWindow(promise) {let newWindow = null;const timeOut = setTimeout(() => {try {if (navigator.userAgent.indexOf('Chrome') > -1) {newWindow = window.open('', '', 'width=500,height=100,location=no,menubar=no');}} catch (e) {console.log(e);}}, 4500);promise.then((url) => {clearTimeout(timeOut);if (newWindow) {newWindow.location.href = url;} else {window.open(url);}});
}

使用

const fn =asncy function(){const url =await requset
return url
}
asyncOpenWindow(fn())

window.open无法打开新窗口相关推荐

  1. window.open 不打开新窗口_关闭四十年的“新窗口”,由谁打开?

    历史是有趣的,有时候时势造英雄,英雄却无用武之地.偏振测量是X射线天文学最早探索的方向之一,却成为最晚打开的窗口.守得住四十年的寂寞,是因为期盼云开月明的一天.这四十年发生了什么,又有何感悟? (图源 ...

  2. js打开新窗口并且不被拦截

    js打开新窗口并且不被拦截 window.open是javascript函数,该函数的作用是打开一个新窗口或这改变原来的窗口,如果你直接在js中调用window.open()函数去打开一个新窗口,浏览 ...

  3. window.open 打开新窗口被拦截的其他解决方法

    使用window.open 打开新窗口容易被浏览器拦截,可以使用下面的方法解决 if ($("#jiedaitype").val() == "1") {     ...

  4. JS打开新窗口的代码window.showModalDialog()

    用JS代码打开新窗口 function openNewWindow(url,width,height,formname) {     var feature="dialogWidth:&qu ...

  5. window.open打开新窗口被浏览器拦截的处理方法

    一般我们在打开页面的时候, 最常用的就是用<a>标签,如果是新窗口打开就价格target="_blank"属性就可以了, 如果只是刷新当前页面就用window.loca ...

  6. JavaScript浏览器window对象→简介、消息对话框、计时器、history、打开新窗口及模式showModalDialog、location、navigator、screen、窗口位置尺寸

    window对象 alert消息提示对话框 confirm消息确认对话框 prompt互动对话框 计时器 setInterval周期计时器 setTimeout延迟计时器 window.history ...

  7. 使用 window.open 打开新窗口

    打开新窗口的方式有哪些 在链接上单击右键,然后选择「在新窗口打开链接」或者「在新标签打开链接」 按住键盘上的 Ctrl/Command 单击链接,新标签打开链接 <a href=".. ...

  8. 使用window.open打开新窗口被谷歌浏览器拦截

    在写后台动态传前台资源链接的时候,需要用到,返回后直接在新窗口打开.开发使用的谷歌浏览器,使用window.open(),测试的时候,发现总是被拦截,这这里记录下解决的方法. 找了写资料,说是当非用户 ...

  9. js -- 打开新窗口(window.open)、关闭窗口(window.close)

    open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL:可选参数,在窗口中要显示网页的网址或路 ...

  10. window.open()打开新窗口被浏览器拦截

    原因:在浏览器的安全机制里面,非用户触发的window.open方法,是会被拦截的. 经过实际测试,Chrome.IE不会拦截,FireFox会拦截. //不会被拦截 $('#btn').click( ...

最新文章

  1. “人文清华”讲坛——陈国青 大数据:颠覆的力量(附视频)
  2. Spring学习(五)——Spring注解(一)
  3. 如何批量给数字前面加半角单引号[转]
  4. [二分查找] 二:二分查找的经典例题
  5. asp网页设计流量统计代码
  6. 《算法竞赛入门经典》第三章 3.4
  7. hadoop 单机伪分布式安装步骤
  8. Matlab符号数学(Symbolic Math with MATLAB)MATLAB解方程
  9. indesign教程,如何创建对齐参考线?
  10. java多线程通信 例子
  11. Webpack框架知识整理——Modules
  12. 4-1.最大子数组分治法实现
  13. rpc接口和http接口的区别和联系1 什么是http接口http接口是基于http协议的post和get接口。2 什么是rpc接口rpc接口就相当于调用本地接口一样调用远程服务的接口。
  14. De4Dot+Reflector 支持多种反混淆
  15. 关于 HSF框架 (一)简单介绍
  16. 记一次简单的burpsuite弱口令爆破实验
  17. 什么是生成器 — 一篇文章让你看懂
  18. 模型包装,答辩吹牛方法论!
  19. android+获取电池信息,Delphi XE5 Android应用程序获取电池信息
  20. 【CTF WriteUp】2020电信和互联网行业赛个人赛部分Crypto题解

热门文章

  1. Python 3 字符串 split( ) 方法
  2. linux 查看ip
  3. Xcode 8.0 Beta发布,详解Swift语言的重大变化
  4. oracle版本区别 win7_Oracle在Win7服务管理中消失的解决方法
  5. 2022芒果TV算法赛_用户下一个观看视频预测_baseline_CF召回YoutubeDNN
  6. 瘦了红颜, 多了寂寞
  7. java获取docx_java使用poi读取doc和docx文件的实现示例
  8. Android闪闪发光字体
  9. 微软拼音中设置小鹤双拼
  10. apache启动服务失败