2

我一直在做一些关于打开一个新窗口并使用 jQuery/JavaScript 将 HTML 写入它的研究,看起来正确的方法是:

为新窗口创建一个变量

var w = window.open();

插入新数据并使用变量

$(w.document.body).html(data);

对我来说,这完全有道理。但是,当我尝试将其合并到我的脚本中时(“数据”是 HTML 的持有者),它不会打开一个新窗口......除非我只是错过了一些简单的东西,据我所知它看起来很棒。 ..

function newmore(str) {
    var identifier = 4;
    //get the history
    $.post("ajaxQuery.php", {
        identifier : identifier,
        vanid : str
    },
    //ajax query 
    function(data) {
        //response is here
        var w = window.open();
        $(w.document.body).html(data);
    });//end ajax                
}

有任何想法吗?

PS 控制台中似乎没有错误

4

3 回答 3

9

您的新窗口可能被大多数浏览器内置的弹出窗口阻止程序阻止。如果您创建新窗口作为用户操作(键、单击)的直接结果,那么浏览器通常不会阻止它。但是,如果您等到稍后的某个时间(例如在 ajax 调用完成之后),那么它将被阻止,这可能就是您的情况。

因此,修复通常是立即创建窗口以直接响应用户事件(不要等到 ajax 调用完成),将窗口句柄保存在变量中,然后在 ajax 调用后将内容放入窗口中完成。

function newmore(str){
    var identifier = 4;
    // create window immediately so it won't be blocked by popup blocker
    var w = window.open();
    //get the history
    $.post("ajaxQuery.php", {
        identifier : identifier,
        vanid : str
    },
    //ajax query 
    function(data) {
        //response is here
        $(w.document.body).html(data);

    });//end ajax                

}
于 2013-02-25T15:24:46.830 回答
2

请尝试:

var w = window.open();
w.document.write(data);

文档对象的“innerHTML”属性(这是 jQuery.html()使用的)表示 HTML 文档,新窗口没有。即使这样做了,将完整的文档放入HTML 文档中也没有任何意义。这是一个新创建的文档,因此您可以直接对其进行写入。

于 2013-02-25T15:10:18.803 回答
-1

这种和平的代码将起作用:

var data = "<h1>Test</h1>";
var w = window.open("", "mywindow1", "width=350,height=150");
$(w.document.body).html(data);

打开新窗口时必须告知一些参数。

但是,如果可能的话,我几乎不建议您使用另一种方式,例如 jquery UI 或 Twitter Bootstrap,因此您不会使用弹出窗口。

于 2013-02-25T15:26:49.430 回答