Javascript window.open打开弹出窗口而不是窗口-行为不一致

Javascript window.open打开弹出窗口而不是窗口-行为不一致,javascript,ajax,window.open,Javascript,Ajax,Window.open,在我的javascript代码中,我使用的是window.open方法,其行为完全不一致:根据我编写代码的方式,它将打开一个新选项卡或打开一个弹出窗口(弹出窗口拦截器会阻止该窗口)。我不知道如何解决这个问题谢谢你的帮助。 html代码: <a class='btn btn-success' target="_blank" onclick="quoteVisu(); return false;">Visualiser</a> quoteCreate是一个带有AJAX调用的

在我的javascript代码中,我使用的是window.open方法,其行为完全不一致:根据我编写代码的方式,它将打开一个新选项卡或打开一个弹出窗口(弹出窗口拦截器会阻止该窗口)。我不知道如何解决这个问题谢谢你的帮助。 html代码:

<a class='btn btn-success' target="_blank" onclick="quoteVisu(); return false;">Visualiser</a>
quoteCreate是一个带有AJAX调用的方法

function quoteCreate(num_function){
    var request=$.ajax({
    url: url_up,
    type: "POST",
    beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
    data: {q_param: {
             title: title, 
             total: total,
             list: list,
             client: idclient,
             tax_rate: tax_rate 
           }},
    success: function(data, textStatus, jqXHR) {
              if (num_function==1){request.done(goShow(data.quote_id))};
              if (num_function==0){request.done(goBack());}
            },
    dataType: "json"
    });
return true;
}
以及goShow方法:

function goShow(quote_id) {
    var url_visu="/visu_pdf/quote_visu."+quote_id
    window.open(url_visu, '_blank');
    return true;
 }
上面的代码提供了一个弹出窗口,它不是预期的行为。例如,如果我将window.open放在quoteVisu方法中,我将打开一个选项卡,而不是我想要的弹出窗口。但是如果我把它放在那里,我就没有新窗口url所需的JSON的答案


感谢您的帮助。

根据W3 HTML5建议,
窗口。调用open
应打开一个
窗口。但是,它只是说应该打开一个辅助设备:

窗口对象上的open()方法提供了一种机制,用于导航现有浏览上下文或打开和导航辅助浏览上下文。

.open
方法确实提供了一个
target
字段,您可以使用该字段设置目标浏览内容:

\u空白新建

\u自流

\u如果当前没有父级,则为父级

\u如果父级也是顶级父级/top

\u如果有一个父级,但它不是顶级父级

\u如果top是当前top

\u如果top不是当前top,则为top

但是,这并不区分选项卡或窗口

总之,无法控制是显示选项卡还是窗口。这不是你能控制的事情。下面是一个例子:

函数openTab(名称){
打开(“http://en.wikipedia.com“,姓名);
}
功能计时器(n){
setTimeout(函数(){openTab(n);},1);
}

没有计时器的链接似乎是一致的:每次在Chrome上打开一个标签。另一方面,带有计时器(异步)的一个永远不会一致(在Chrome上)。第一次打开窗口时,下一次单击Run后尝试时,它会打开一个选项卡。无法确保它每次都打开一个选项卡。(通常,普通浏览器会在异步函数调用窗口时打开该窗口。)

是否会弹出选项卡或窗口。这是一个本机实现。浏览器之间,甚至浏览器本身之间的行为应该是不一致的。首先,我要从链接中删除
target=“\u blank”
,这里没有任何意义。其次,由于异步AJAX调用,窗口的打开与实际的点击事件是“解耦”的,这可能会使浏览器做出不同的反应。这似乎是个问题,但没有解决方案的事实非常疯狂,我想这是一个常见的问题…哇,回答得很好,谢谢。如果我理解得很好,我就不能在这个问题上做任何事情,因为ajax调用应答的时间,对吗?这很令人失望,但至少我不必再花时间调试了@fro实际上没有解决方案,因为不是每个浏览器都有选项卡,一般建议尝试涵盖所有情况。这取决于浏览器本身。
function goShow(quote_id) {
    var url_visu="/visu_pdf/quote_visu."+quote_id
    window.open(url_visu, '_blank');
    return true;
 }
             keyword                   ordinary effect
function openTab(name){
    open("http://en.wikipedia.com", name);
}

function timer(n){
    setTimeout(function(){ openTab(n); }, 1);
}

<a href="#" onclick="openTab('Wikipedia')">Open Tab</a>
<a href="#" onclick="timer('Wikipedia')">Open Tab With Timer</a>