知识简介window.open命令会在用户操作(可信事件)时正常打开页面,不会被浏览器拦截ps:什么是可信事件trustedevents是evnet.isTrusted为true。Event接口的isTrusted只读属性是一个布尔值,当事件由用户操作生成时为true,当事件由脚本创建或修改或通过dispatchEvent调度时为false。问题是很多时候,我们需要在异步请求回来的时候跳转。这时候如果我们等到请求返回再去window.open,就会被浏览器拦截。解决方案场景1,发送请求后等待请求返回,如果想跳转到页面不管请求结果是否正确,需要varA=window.open()一个new发送请求之前的窗口。然后当请求结束时,将URL附加到窗口functionclickAction(){varopenWind=window.open()ajaxAgent('POST','URL',params).then((resutl)=>{opneWind.loaction.href='jumpURL'})}-'Note'这里会有一个问题,如果异步请求时间过长,会让用户觉得那里挂着一个空白的窗口O__O....场景2,如果想在发送请求后等待请求返回,根据请求结果决定是否跳转,此时,在执行异步请求前开一个新窗口是解决不了的,因为它可能把返回结构是失败的,你不想跳。这时候Go会关闭空窗口,给用户带来困惑。目前被屏蔽是在所难免的,只能通知用户让用户对被屏蔽的页面添加信任。varopenNewWindow=window.open(url);//判断跳转页面是否被屏蔽。//如果已经被屏蔽了,给他一个提示//提示可以是引导用户解决被屏蔽的问题(添加信任)if(!openNewWindow||openNewWindow.closed||typeofopenNewWindow.closed==='undefined'){alert('您的支付界面窗口已被浏览器屏蔽')}
