使用javascript将html写入新窗口

时间:2013-02-25 15:06:13

标签: javascript jquery ajax new-window

我一直在研究打开一个新窗口并使用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                
}

有什么想法吗?

P.S。控制台似乎没有错误

3 个答案:

答案 0 :(得分: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                

}

答案 1 :(得分:2)

尝试改为:

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

文档对象的“innerHTML”属性(jQuery的.html()使用的)表示HTML文档,新窗口没有。即使它确实如此,将完整的文档放在 HTML文档中也没有意义。这是一个新创建的文档,所以你可以写信给它。

答案 2 :(得分:-1)

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

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

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

但是,如果可能的话,我几乎不建议您使用其他方式,例如jquery UI或Twitter Bootstrap来执行此操作,因此您不会使用弹出窗口。