zoukankan      html  css  js  c++  java
  • window.open()打开新窗口被拦截

    window.open( url )是常用的打开新页面的方法,一般都没有问题,但是如果在ajax回调方法里面使用就会被浏览器拦截,因为在浏览器安全机制中,页面弹窗必须是由用户触发的才是安全弹窗,比如说绑定的onclick(),onchange()事件触发,而由ajax或定时器执行的弹窗均为非用户触发,所以会被浏览器安全机制(其他安全软件)理解为非安全弹窗而被拦截。

    解决办法一:

    <div onclick="testFunc()">点击我呀</div>
    
    function testFunc() {
            var openWindow = window.open();
            $.ajax({
                url: 'url',
                type: 'POST',
                dataType: 'json',
                data: {param1: 'value1'},
                success: function(data){
                    openWindow.location = data.url;  //在重定向页面链接
                }
            })
        }

    缺陷:从发起弹窗,到后面的重定向(指定跳转地址)必须是一条现行流程,如果中途需要用户做交互的校验,那此方法就会有问题,会跳转至一个空白页面。比如:

    $.ajax({
                url: 'url',
                type: 'POST',
                dataType: 'json',
                data: {param1: 'value1'},
                success: function(data){
                    if(window.confirm('你确定要跳转吗?')) {   //用户确认后才能进行跳转
                        openWindow.location='http://www.baidu.com';
                    }
                }
            })

    解决方法二:

    手动将ajax的请求改为同步请求(async: false),此处就不粘代码了,可自行测试。

    缺陷:基本上能解决浏览器的拦截问题,但是解决不了安全软件的拦截

  • 相关阅读:
    初学Cocos2dx
    炸弹人NABCD分析
    求二维整数数组中最大联通子数组的和
    大道之简读书笔记1
    求首位相连二维数组最大子矩阵的和
    求首位相连一维数组最大子数组的和
    求二维数组最大子数组的和
    程序员修炼之道读后感3
    电梯调度需求分析
    课堂作业第四周课上作业二
  • 原文地址:https://www.cnblogs.com/qilj/p/7930222.html
Copyright © 2011-2022 走看看