我一直在研究打开一个新窗口并使用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。控制台似乎没有错误
答案 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来执行此操作,因此您不会使用弹出窗口。