1。对问题的描述
在Ajax异步请求是成功的,我们需要在新窗口打开网址,使用window.open()
方法,但是它会被
浏览器所堵塞,我们需要
用户点击。
两。问题分析
新的浏览器拦截窗口是因为
操作不是用户主动触发,所以认为拦截是不安全的,即使点击仿真实施或提交用户行为Ajax回调
函数(触发(听到咔哒声)),浏览器不被认为是由用户主动触发,它可以所以它是安全的
执行拦截。
解释uff1a
1、如果你调用window.open()在指定的有趣的方法,它将不会被拦截,因为浏览器会认为这是积极的。但在Ajax请求的响应打开窗户会被截获。
2,如果不是新窗口打开,但是改变原来的
网页地址,你可以使用window.location = newurl做它,所以它不会被拦截。
三。
解决 在Ajax请求,用window.open打开一个空白窗口,然后
设置窗口的
位置属性在Ajax响应函数作为新的URL。
代码示例,例如:
功能乐趣(){
无功tmpwin = window.open()
ajax(xxx、句柄(){(){
回调函数。这是一个伪代码,并且不允许语法。
无功newurl = XXXX
tmpwin.location = newurl;
})
}
当上述方法出现问题时,因为首先打开空白窗口,如果Ajax请求失败(
网络或业务逻辑问题),则新窗口中不会出现正常结果,这可能会引起用户的怀疑。
解决的办法是,当Ajax有问题,你可以考虑给个
提示,如tmpwin.document.write(
服务器
处理异常);
甚至为了防止Ajax响应时间太长,当窗口,提示提示tmpwin.document.write(服务器正在处理中,请稍后);
如果Ajax正常返回,则设置位置值,原始
打印信息由新页信息覆盖。
还有另外一种方法,但也有缺陷。
因为AJAX可以设置为一个
同步的要求,新的窗口可以打开window.open Ajax请求后,如:
功能乐趣(){
VaR结果;
ajax(设置)/同步请求
的…
结果:XXX
…
})
如果(结果){
Window.open(XXXX)
}
}
根据Ajax请求的结果判断上述方法,打开一个新窗口并避免上述问题。
但是由于同步请求,我们在测试中
发现了一个问题。如果服务器响应时间太长,接口将暂停(用户体验不好),而两个新窗口将被截获。
只有当服务器快速返回时才有问题。当我们测试时,我们在服务器代码处理中休眠1秒,并发现新窗口被截取。
四、总结
总之,您可以看到Ajax返回后没有一个特别完美的方法来打开一个新窗口,特别是我们应该根据您自己的
系统的业务特性采取相应的实践。
以上是
介绍了Ajax请求的响应由window.open的解决方案,这是由新的Windows封锁。我希望它会对你有帮助。如果你有任何问题,请给我留言,萧边会及时给您回复。谢谢您
支持网站。