博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
handle中存在异步操作,window.open被浏览器阻止的问题
阅读量:7256 次
发布时间:2019-06-29

本文共 855 字,大约阅读时间需要 2 分钟。

想要window.open不被浏览器阻止,需要在事件的处理函数的作用域中调用window.open打开新窗口,比如在用户click的时候。

xxx.onClick = ()=>{    window.open('/');}

但是当处理函数(handle)中涉及到异步操作的时候, 我产生了两种错误的解决想法。一是直接把handle绑定为async函数,大体这样

xxx.onClick = async()=>{    let url = await oneAsyncOperation;    window.open(url);}

这样做忽略了async函数内部已经不属于handle的作用域,所以不可行,依然会被浏览器阻止。意识到这点之后,随手就改,大体这样:

let handleGenerator = async()=>{    let url = await oneAsyncOperation;    return ()=>{        window.open(url);        }}xxx.onClick = handleGenerator();

期望的是通过一个async高阶函数,在函数体内进行异步操作,然后返回一个普通函数作为handle。

马上就发现自己又想错了,async函数的返回体是Promise,不是Function,因此并不能作为handle。

<br/> 最后只能放弃使用async函数,换用另一个方案来打开窗口:

xxx.onClick = ()=>{    let win = window.open('/'); //在handle的作用域内,先打开一个window    oneAsyncOperation().then((url)=>{        win.location.href = url; //然后在异步操作的回调中对前面创建的新window重新设置属性    })}

ps: 上面先创建的window, 一般先打开一个loading页面的地址。

转载地址:http://vcvdm.baihongyu.com/

你可能感兴趣的文章
RAC1——Clusterware概念简介1
查看>>
一位10年Java工作经验的架构师聊Java和工作经验
查看>>
试除法求最小N个素数之二
查看>>
HDU2017 字符串统计
查看>>
terminator终端工具
查看>>
【转】那些相见恨晚的 JavaScript 技巧
查看>>
Lind.DDD.Authorization用户授权介绍
查看>>
谈谈设计模式~原型模式(Prototype)
查看>>
商城商品倒计时原生插件
查看>>
激光打印机的Color/paper, Xerography介绍
查看>>
敏捷开发
查看>>
react-native项目构建配置及window调试devtools
查看>>
Gym 100341C AVL Trees NTT
查看>>
第 1 章 虚拟化 - 004 - 启动第一个 KVM 虚机
查看>>
2.1.2_BeanFactory.getBean内部处理逻辑
查看>>
储存过程-原理、语法、函数详细说明
查看>>
第十六周项目6-黑豆传说
查看>>
【servlet3.0新特性】Annotation注解配置
查看>>
js操作cookie
查看>>
spring注解方式 idea报could not autowire,eclipse却没有问题
查看>>