关于ajax请求 window.open被拦截问题

本文介绍了解决在Ajax请求后使用window.open方法被浏览器拦截的问题,通过提前打开一个空窗口或模拟点击事件的方式绕过限制,确保弹窗能够正常显示。

window.open放在ajax校验完成并且成功后才会调用,这时浏览器会觉得这个弹窗不是用户操作想看到的,
所以自动进行了拦截!

解决方法

	// 提前打开一个空的窗口
	var newTab=window.open('about:blank');
	$.ajax({
		type: "post",
		url: "/xxxx/xxxx",
		data: {"param": param},
		error: function (data) {
			showError(data);
		},
		success: function (data) {
			if (data.errorFlag == 0) {
				// 给新打开的窗口赋值
				newTab.location.href = "www.baidu.com";
			} else {
				alert('提示信息');
			}
		}
	});

出现被拦截情况的原因主要在于,浏览器不允许,非用户行为的窗口打开方式,所以必须通过点击事件来触发URL打开,所以采取了下面的解决办法:

函数封装:先创建个跳转的a元素,模拟发送click请求后将该元素从文档中删除;


	$.ajax({
		type: "post",
		url: "/xxxx/xxxx",
		data: {"param": param},
		error: function (data) {
			showError(data);
		},
		success: function (data) {
			if (data.errorFlag == 0) {
				openWin('http://www.baidu.com');
			} else {
				alert('提示信息');
			}
		}
	});

	function openWin(url) {
	    $('body').append($('<a href="'+url+'" target="_blank" id="openWin"></a>'))
	    document.getElementById("openWin").click();//点击事件
	    $('#openWin').remove();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值