从后端传一个url, 前端收到后打开新窗口跳到这个链接.
使用 window.open(url, '_blank');
被浏览器拦截.
请问有什么办法实现吗 ? 试了下模拟a标签点击照样拦截, 弹出div加载iframe不行, 必须要打开窗口.
问题已解决, 见采纳答案.
从后端传一个url, 前端收到后打开新窗口跳到这个链接.
使用 window.open(url, '_blank');
被浏览器拦截.
请问有什么办法实现吗 ? 试了下模拟a标签点击照样拦截, 弹出div加载iframe不行, 必须要打开窗口.
问题已解决, 见采纳答案.
<a href="http://www.baidu.com" target="_blank" id="xx">hahah</a>
<button type="button" id='btn'>clickme</button>
<script>
document.getElementById('btn').onclick = function() {
document.getElementById('xx').click();
}
</script>
没毛病啊。
已解决问题
参考博文:http://flc.io/2015/11/289.html
片段代码:
<script>
function dialog(){
$.ajax({
url: 'url',
type: 'POST',
dataType: 'json',
**async: false,** **// 此处必须定义为同步**
data: {param1: 'value1'},
success: function(data){
gotourl(data.url); //发起弹窗
}
})
}
/**
*/
function gotourl(url){
var a = $('<a href="'+ url +'" target="_blank">链接</a>'); //生成一个临时链接对象
var d = a.get(0);
var e = document.createEvent('MouseEvents');
e.initEvent( 'click', true, true ); //模拟点击操作
d.dispatchEvent(e);
a.remove(); // 点击后移除该对象
}
</script>
3 回答5.1k 阅读✓ 已解决
5 回答1.9k 阅读
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答1.9k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
这个问题首先要了解为啥会拦截,浏览器会对"非人为"的调用
window.open
的弹窗进行拦截,什么叫做"非人为"的,就是浏览器判断在用户操作和window.open
之间不是连续的,浏览器会认为可能是流氓程序弹出的广告窗口从而进行拦截从楼主的描述可以看出,楼主应该是进行某个操作之后,通过ajax去获取一个url,然后通过
window.open
打开页面,我们都知道ajax是异步的,浏览器就认为不是连续的,所以就拦截了解决方法可以先在操作(比如点击)的时候,直接
window.open
,然后再去ajax获取数据,再给打开的window赋值url,大概的伪代码如下: