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

时间:2014-08-23 00:27:56

标签: javascript ajax window.open

在我的javascript代码中,我使用window.open方法并且行为完全不一致:根据我编写代码的方式,它将打开一个新选项卡或打开一个弹出窗口(被弹出窗口阻止)阻止者)。由于你的帮助,我不知道如何解决它。 HTML代码:

<a class='btn btn-success' target="_blank" onclick="quoteVisu(); return false;">Visualiser</a>

javascript代码:

function quoteVisu(){
  quoteCreate(1);
} 

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方法中,例如我将打开一个标签,而不是弹出这是我想要的。但如果我把它放在那里,我就不会得到新窗口网址所需的JSON答案。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

根据W3 ​​HTML5建议书,window.open应该在调用时打开window [1] 但是,它只说辅助"browsing context"应该打开:

  

Window对象上的open()方法提供了一种导航现有浏览上下文或打开并导航辅助浏览上下文的机制。

.open方法确实提供了target字段,您可以使用keywords from this se来设置目标浏览内容:

             keyword                   ordinary effect
     

<强> _blank new
     _self current
     _parent if there isn't a parent current
     _parent if parent is also top parent/top
     _parent if there is one and it's not top parent
     _top if top is current current
     _top if top is not current top

然而,这并不能区分标签或窗口。

总之,无法控制是否显示选项卡或窗口。它不是你控制下的东西。这是一个例子:http://jsfiddle.net/DerekL/0amrodLx/

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>

没有计时器的链接似乎是一致的:每次在Chrome上打开一个标签。另一方面,具有计时器(异步)的计算机永远不会一致(在Chrome上)。第一次打开一个窗口时,下次单击运行时我会尝试打开一个选项卡。没有办法确保它每次都打开一个标签。 (一般常见的浏览器会打开一个窗口,如果它被异步函数调用的话。)