zoukankan      html  css  js  c++  java
  • 浏览器阻止新窗口(window.open或新窗的form提交)

    在写js时,经常会出现浏览器会阻止用js写的window.open代码,但是,又不是每次都会阻止,它只会阻止特定情况下的window.open。

    因为如果浏览器默认都阻止window.open代码是不现实的,所以观察chrome浏览器对window.open阻止情况的总结如下:

    浏览器不会阻止用户主动发起的window.open方法;浏览器一般都会阻止非用户主动发起的window.open。

    这里有一个问题,什么叫用户主动发起?

    如下代码在执行过程中就是用户主动发起

    <a href="window.open('http://www.baidu.com','_blank');">百度</a>

    如下代码在执行过程中会被认为非用户主动发起:

    <a href="javascript:setTimeout(function(){window.open('http://www.baidu.com','_blank')},2000);">百度</a>

    也就是说,用户触发一个事件后,事件处理函数所执行的window.open会被认为是合理的不会被阻止;但是,如果是由异步方式再执行window.open 会被浏览器阻止,因为浏览器认为不是由用户主支发起的,而是js代码自己发起的。这里就涉及到js前端代码经常会用到的ajax调用了,如果用到ajax时用的是异步执行(默认都是异步执行),那么就会经常出现window.open会被阻止。解决的方法是把ajax设置成同步。

    $.ajax({  
    
               async: false, //就是设置这个最为关键的ajax同步  
    
               type: 'POST',  
    
               url: ctx + "/sales/submitBank",  
    
               data: orderPost,  
    
               success: function(datas){  
    
                   result = datas;  
    
               }  
    
           }); 

    以上描述同样适用于form提交

    Dwr可以直接改写参数:

    async:false即可

  • 相关阅读:
    工作中用到知识点
    工作中遇到问题的解决办法
    透明度兼容性(ie8以上)
    js阻止浏览器默认行为
    js停止冒泡和阻止浏览器默认行为
    js添加事件通用方法
    jquery常用插件
    延迟加载、异步加载js
    JavaScript兼容性问题
    创建对象的一种方式&一种继承机制(代码实例)
  • 原文地址:https://www.cnblogs.com/eaysun/p/4758270.html
Copyright © 2011-2022 走看看