有这样一种场景,我们在打开一个资源的详细信息之前,需要对其进行一些校验,
如:由于客户端未及时刷新,而该资源实际已被删除,此时我们通过window.open
试图在新标签页展示该资源详情,结果用户可能看到一个没有信息的页面。代码类似这样:
function goto(instanceId){
event.preventDefault();
$.ajax({
...options,
url: "/rest/${instanceId}",
success: function(res){
if(res){
window.open("/data/${instanceId}", "_blank");
}
},
err: function(err){
// handler err
}
});
}
html
是这样的
<a href="/data/${instanceId}" onclick="goto(${instanceId})">
但是问题来了,通过window.open
方式会被Chrome
、Firefox
阻止,如果不特别设置的话。
测试发现,如果没有这个异步的查询过程直接打开新标签页,问题就没有了。
有什么办法可以不更改需求的前提下完美解决该问题么?
资源打开之前感觉没必要做校验,对于正常用户,验证接口相当于额外的开销,对于非法用户,就返回一个404,就比如segmentfault: