使用javascript将html写入新窗口

Nic*_*ick 2 javascript ajax jquery new-window

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

为新窗口创建变量

var w = window.open();
Run Code Online (Sandbox Code Playgroud)

插入新数据并处理变量

$(w.document.body).html(data);
Run Code Online (Sandbox Code Playgroud)

对我来说,这完全合情合理.然而,当我尝试将其合并到我的脚本中时("数据"是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                
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

PS似乎在控制台中没有错误

jfr*_*d00 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                

}
Run Code Online (Sandbox Code Playgroud)

  • @Nick - 是的,这很痛苦,但浏览器也很难弄清楚什么是不想要的广告弹出窗口.问题在于最糟糕的广告服务试图破坏我们使用这些弹出窗口的浏览体验,并导致浏览器必须以这种方式响应. (3认同)