window.Open打开弹出窗口而不是新窗口

时间:2011-03-15 06:35:12

标签: javascript jquery

我在jQuery中有一个ajax函数,我希望在完整的函数中在新窗口或标签中打开一个url。

<a href="#" onclick="Add('1','http://www.google.com');return false;">Link</a>

并且:

function Add(ID, url)
{
    var data = "{'ID' : '" + ID + "'}";
    $.ajax({
        type: "POST",
        url: "Function.ashx/Add",
        data: data,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        complete: function ()
        {
           window.open(url);
        }
    });
}

window.open函数用作弹出窗口,但我想在新窗口中打开链接。 w3School Example完美无缺。 但我的浏览器将其检测为弹出窗口并将其阻止 我的代码出了什么问题?

2 个答案:

答案 0 :(得分:1)

为什么要专门等到AJAX调用完成加载URL?

为什么不直接触发AJAX调用并在之后直接打开新窗口。

示例:

<a href="#" onclick="Add('1','http://www.google.com');return false;">Link</a>

function Add(ID, url)
{
    var data = "{'ID' : '" + ID + "'}";
    $.ajax({
        type: "POST",
        url: "Function.ashx/Add",
        data: data,
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    });

    window.open(url);
}

答案 1 :(得分:0)

我猜w3cschool.com可能会成为授权辅导网站的popup previlige。

AFAIK,任何在没有直接用户交互(例如点击)的情况下打开额外窗口的方法都被视为“弹出窗口”,并且在启用弹出窗口阻止程序的情况下会被大多数浏览器阻止。你最好的选择可能是在点击时打开链接并在AJAX完成时注入你想要的任何东西:

<a href="http://www.google.com" onclick="Add('1')">Link</a>

function Add(ID, url)
{
    var newWindow = window.open(url);
    var data = "{'ID' : '" + ID + "'}";
    $.ajax({
        type: "POST",
        url: "Function.ashx/Add",
        data: data,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        complete: function (data)
        {
           // do whatever you want with newWindow
        }
    });
}