精华内容
下载资源
问答
  • js关闭浏览器窗口,不弹出提示框。支持ie6+,火狐,谷歌等浏览器,下面以一个示例为大家详细介绍下具体的实现方法,感兴趣的朋友可以参考下
  • 最近在做支付时发现打开支付窗口时被浏览器拦截了,百度了一下才发现是因为打开窗口前用ajax验证是否能支付,所以不是用户主动触发的打开ixin窗口浏览器认为这样不安全,所以给拦截了。解决办法一先开始打开一个空...

    最近在做支付时发现打开支付窗口时被浏览器拦截了,百度了一下才发现是因为打开窗口前用ajax验证是否能支付,所以不是用户主动触发的打开ixin窗口,浏览器认为这样不安全,所以给拦截了。

    解决办法一

    先开始打开一个空的新窗口,然后改变新窗口的url,具体代码为

    var wd = window.open();

    $.ajax({

    type: "POST",

    dataType: "json",

    url: URL,

    data: {orderNo:orderNo},

    success: function(data) {

    if(data.status=='success'){

    wd.location.href = 'http://www.baidu.com';

    }else{

    alert('订单不能支付!');

    }

    },error: function(data) {

    alert("正在加载请稍后!");

    }

    });

    这种实现方式有个弊端,就是不管ajax有没有成功,都会执行 var wd = window.open();这行代码,所以成功和失败都会打开一个新窗口,除非在失败后进行关闭,但这样用户体验会非常不好,所以我用的第二种方式去实现的。

    解决办法二

    因为ajax是默认是异步的,这样性能高,用户体验好,但这也导致了安全问题,要让浏览器认为弹出新窗口是安全的,必须让弹新窗口之前所有的ajax是同步的,具体代码为

    $.ajax({

    type: "POST",

    dataType: "json",

    url: URL,

    async: false,//同步请求

    data: {orderNo:orderNo},

    success: function(data) {

    if(data.status=='success'){

    window.open("www.baidu.com");

    }else{

    alert('订单不能支付!');

    }

    },

    error: function(data) {

    alert("正在加载请稍后!");

    }

    });

    以上所述是小编给大家介绍的Ajax打开新窗口被浏览器拦截的两种解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

    时间: 2017-01-02

    展开全文
  • pushHistory();  window.addEventListener("popstate", function(e) {  var ua = navigator.userAgent.toLowerCase();  if(ua.match(/MicroMessenger/i)=="micromessenger") {  ...WeixinJSBridge.call('...
    pushHistory(); 
    
    window.addEventListener("popstate", function(e) { 

    var ua = navigator.userAgent.toLowerCase(); 
    if(ua.match(/MicroMessenger/i)=="micromessenger") { 
    WeixinJSBridge.call('closeWindow'); 
    } else if(ua.indexOf("alipay")!=-1){ 
    AlipayJSBridge.call('closeWebview'); 
    }
    else{ 
    window.close(); 

    }, false); 


    function pushHistory() { 
    var state = { 
    title: "title", 
    url: "#"
    }; 
    window.history.pushState(state, "title", "#"); 

    展开全文
  • 项目需求要在新窗口打开链接,但被拦截了 ...不区分浏览器,需要在ajax回调中在新窗口打开页面时,都弹出一个弹窗(包含a标签按钮),修改a标签的src,引导用户点击按钮,实现防止浏览器拦截窗口弹窗的功能

    项目需求要在新窗口打开链接,但被拦截了

    1.问题

    • 需要在ajax回调中在新窗口打开页面
    • 在浏览器开启拦截弹窗时,window.open(src, "_blank");这个会被拦截

    2.发现

    • 浏览器会拦截所有非用户触发的新窗口打开页面(js的跳转)

    • 判断浏览器是否打开新窗口的代码不兼容

      • js代码
      var flag = false;
      try{
      	var winSrc = window.open("https://www.csdn.net/","_blank");
      	if(winSrc == null){
      		flag = true;
      	}
      }catch(e){
      	flag = true;
      }
      if(flag){
      	console.log("window.open()为null")
      }
      
      • 检验效果
        • pc端,检测了几个浏览器,都是ok的
        • 苹果端,用这个判断是ok的
        • 安卓端,会显示被拦截,但是blocked为false,popSrc不为null
    • 延迟这个打开操作无效

      setTimeout('window.open(url);', 500); // 延迟时间不能太短 否则也会被拦截
      

    3.解决办法

    • 弹窗,按钮使用a标签,在新窗口打开页面
      不区分浏览器,需要在ajax回调中在新窗口打开页面时,都弹出一个弹窗(包含a标签按钮),修改a标签的src,引导用户点击按钮,实现防止浏览器拦截新窗口弹窗的功能

    4.例子

    • html代码
    <div class="pop">
        <div class="box">
            <p class="text01">订单创建成功</p>
            <p class="text02">
                请前往订单页面查看信息
            </p>
            <div class="boxBtn">
                <a class="boxBtnCheck" target="_blank" href="">查看订单</a>
            </div>
        </div>
    </div>
    
    • js代码
    //ajax回调中使用
    $('.boxBtnCheck').attr('href', res.data)
    $('.pop').show()
    
    //兼容的弹窗 关闭
    $('.boxBtnCheck').click(function () {
      $('.pop').hide()
    });
    

    5.参考文章

    展开全文
  • 解决浏览器拦截弹出窗口问题

    千次阅读 2018-09-28 22:02:00
     当使用新窗口弹出页面时,浏览器有时会默认拦截弹出,并不友好。  比如使用第三方支付宝api做支付的时候如果浏览器拦截支付弹窗,可能会导致用户不去付款。 解决方案:  方案一:浏览器拦截的机制就是认为是非...

    问题描述:

      当使用新窗口弹出页面时,浏览器有时会默认拦截弹出,并不友好。

      比如使用第三方支付宝api做支付的时候如果浏览器拦截支付弹窗,可能会导致用户不去付款。

    解决方案:

      方案一:浏览器拦截的机制就是认为是非用户触发的,所以会去拦截,那么我们的思路就是让他变成用户触发的,去避免浏览器进行拦截。

      1、在组件加载时就去请求支付宝三方接口拿到返回的form表单数据

    mounted(){
        let _params = {
          orderId:this.order.orderId,
          amount:this.order.totalPrice,
          serviceName:this.pkl.serviceChn[this.order.serviceId]
        }
        paymentAlipayApi(_params).then(res => {
          if(res.status === 200){
            this.alipayData = res.data
          }
        })
    }

      2、然后当点击立即支付的时候,就触发form的submit方法,规避浏览器拦截机制。

    //确认付款
    submitPay(){
      if(this.paymentMethod === 0){//微信付款
        this.wxData = {
          orderId:this.order.orderId,
          amount:this.order.totalPrice,
          serviceName:this.pkl.serviceChn[this.order.serviceId]
        }
        this.wxShow = true
      }else if(this.paymentMethod === 1){//支付宝付款
        this.paymentAlipay()
      }
    },
    //支付宝付款
    paymentAlipay(){
      document.querySelector('form[name="punchout_form"]').submit()
    },

      此种方案的缺点是就算用户选择微信付款,也还是去请求的支付宝的三方接口,似乎并不是最好的解决方式。

      那么看第二种:

      方案二:我们点击的时候先打开一个空白的新窗口,这种浏览器也会认为是用户点击行为而不会拦截。网上很多例子是直接给新窗口的location.href设置为新url,但是在我们这种需要表单form提交的情况下不行。那么我的思路就是获取新窗口,然后给空白的新窗口innerHTML设置为支付宝返回的表单内容,然后在空白新窗口自身打开新页面,这样也可以解决此问题。因为支付宝三方接口返回的form表单默认就是从自身页面打开的,所以该方法可以规避方案一的问题。

    //支付宝付款
    paymentAlipay () {
        let params = {
            orderId: this.orderInfo.orderId,
            amount: this.orderInfo.totalPrice,
            serviceName: '2018嘉年华' + this.ticket.name
        }
        const newWin = window.open();
        paymentAlipayApi(params).then(res => {
            if (res.status === 200) {
                newWin.document.body.innerHTML = res.data
                this.$nextTick(()=>{
                    newWin.document.querySelector('form[name="punchout_form"]').submit()
                })
            }
        })
    },

     

    展开全文
  • 浏览器拦截窗口问题总结 一般情况下,对于用户正常操作手动触发的a标签、window.open、form表单提交等方式打开新窗口时是不会被浏览器拦截的,可以正常的打开。但是由于业务需求当我们需要在异步的程序中去打开新...
  • 最近在做支付时发现打开支付窗口时被浏览器拦截了,百度了一下才发现是因为打开窗口前用ajax验证是否能支付,所以不是用户主动触发的打开ixin窗口浏览器认为这样不安全,所以给拦截了。解决办法一先开始打开一个空...
  • var opened=window.open('about:blank','_self' ); opened.close(); ...因为新打开页面的时候地址是 ...确定被拦截了 才用 window.open('_blank') 转载于:https://www.cnblogs.com/qiangspecial/p/3489265.html
  • 第一步:通过点击事件,打开新窗口,并且传递参数 $scope.finalTrial = function(data){  var url = $state.href('content.checkFinalTrial')  window.open(url+'?id='+data.id+'&type=1')} 注:点击后需要...
  • 到的时候,浏览器就会出现拦截的问题。 因为,当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。因为浏览器认为这可能是一个广告,不是一个用户希望看到的页面。 那么,我们就要考虑,如何才能将ajax...
  • 最近在做支付时发现打开支付窗口时被浏览器拦截了,百度了一下才发现是因为打开窗口前用ajax验证是否能支付,所以不是用户主动触发的打开ixin窗口浏览器认为这样不安全,所以给拦截了。解决办法一先开始打开一个空...
  • 关于浏览器拦截弹出窗口问题的解决方法正常对于浏览器新开窗口有三种方式1、html里a标签的target属性2、javascript的window.open()方法3、html里form表单的target属性问题分析解决方法1、把javascript的window.open...
  • 3.广告拦截:能拦截所有广告,阻止弹出窗口; 4.页面静音:页面声音打开或者关闭自由控制,上网听音乐玩游戏随心所欲; 5.网页收藏夹:按照您的喜好来自定义自己的收藏夹; 6.历史记录:可以保留历史记录也可以...
  • 第一步:通过点击事件,打开新窗口,并且传递参数$scope.finalTrial = function(data){var url = $state.href(‘content.checkFinalTrial‘)window.open(url+‘?id=‘+data.id+‘&type=1‘)}注:点击后需要直接...
  • 所有种类的浏览器基本都默认拦截弹出窗口,也就是说(window.open)弹出的窗口基本都会被拦截,浏览器会给一个提示"是否允许弹出窗口",对于较低版本的IE来说,弹出新窗口关闭父亲窗口没有任何问题,但是对于火狐...
  • if (navigator.userAgent.indexOf("MSIE") > 0) { if (navigator.userAgent.indexOf("MSIE 6.0") > 0) { //ie... } else { //谷歌等其他浏览器 window.opener = null; window.open('', '_self', ''); window.close(); }
  • 最近在做项目的时候碰到了使用window.open被浏览器拦截的情况,在本机实验没问题,到了服务器就被拦截了,火狐有拦截提示,360浏览器拦截提示都没有,虽然在自己的环境可以对页面进行放行,但是对用户来说,不能要求...
  • 因为项目中需求,浏览器关闭时进行一些操作处理 先是在网上查了一下,然后根据网上大佬博客然后自己修改之后最终测试成功! 下面是代码: <template> <div></div> </template> <...
  • 直入主题: 1.大致思路如下:   var win_object = window.open(); // 如果有ajax则如下 $.ajax({ ..... success: function(){ // 成功后则打开新页面 win_object.location = '新... // 失败关闭...
  • 在项目中遇到了一个需要打开非用户触发的新窗口的问题,也在网上查了一些相关资料,特此积累下来。 直接上代码: onClick() { let {mediaActs} = this.props; mediaActs.goAuthorWeixin().then((res)=>{ if...
  •   1. 场景: ... ajax 提交数据创建订单 ...如果上一步订单创建成功,跳转到支付...但是使用以下几种代码,偶尔(并不是每次)会被浏览器拦截 2.1 ajax 之后,直接用 window.open(url) 略 2.2 ajax 之后,表单提交 ...
  • ajax回调打开新窗体防止浏览器拦截,就这么做!问题剖析:function click_fun(){window.open("www.baidu.com");//能打开$.ajax({'url': '${pageContext.request.contextPath}/activity/savePrizes.htm','type': '...
  • 前面的话 ...因为,有的浏览器窗口可能包含多个标签页,每个标签页都有自己的window对象。本文将详细该内容   窗口位置 【1】获取  浏览器(firefox不支持)提供了screenLeft和screenTop属
  • 需要在异步调用接口前,先打开新窗口;...如果不需要,则关闭窗口即可。 如: let newWin = window.open('') this.singleVisit(url, function (toUrl) { if (toUrl) { newWin.location.href = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,589
精华内容 4,235
关键字:

关闭浏览器窗口拦截功能