使用相同的URL、JavaScript打开多个小窗口

使用相同的URL、JavaScript打开多个小窗口,javascript,jquery,browser,Javascript,Jquery,Browser,我无法在一个页面中使用相同的url打开多个窗口,每次在for循环中调用window.open时,旧的小窗口的内容都会被新内容替换。但我不想替换内容,而是想单独打开一个新窗口 JavaScript代码: function OpenMultipleWindows() { var winContent = ['Page1', 'Page2', 'Page3', 'Page4'] for (var i = 0; i < winContent.length; i++) {

我无法在一个页面中使用相同的url打开多个窗口,每次在for循环中调用window.open时,旧的小窗口的内容都会被新内容替换。但我不想替换内容,而是想单独打开一个新窗口

JavaScript代码:

function OpenMultipleWindows() {
    var winContent = ['Page1', 'Page2', 'Page3', 'Page4']
    for (var i = 0; i < winContent.length; i++) {
        (function (text) {
            var newWin = open('/localFolder/window.html', 'Print', 'width=500,height=500', '_blank');
            newWin.document.body.innerHTML = winContent[text];
        }(i));
    }
}

$(function () {
    OpenMultipleWindows();
});

这个问题有什么解决办法吗?

您的问题是,您不更改弹出窗口的标识符。 您可以尝试以下方法:

function OpenMultipleWindows() {
    var winContent = ['Page1', 'Page2', 'Page3', 'Page4'];
    for (var i = 0; i < winContent.length; i++) {
        (function (text) {
            var newWin = open('/localFolder/window.html', 'Print' + i, 'width=500,height=500', '_blank');
            newWin.document.body.innerHTML = winContent[text];
        }(i));
    }
}

$(function () {
    OpenMultipleWindows();
});
函数OpenMultipleWindows(){ var winContent=['Page1','Page2','Page3','Page4']; 对于(变量i=0;i 第二个参数是标识符,必须是唯一的

//编辑:添加注释作为注释的答案

您需要等待文档加载到弹出窗口中。我通常会为此添加一个JavaScript元素。但我认为你可以这样做(未经测试):

函数addTextToPopup(句柄,文本){
如果(!handle | | handle.closed)返回;
var bodyElem=handle.document.getElementsByTagName('body');
如果(!bodyElem | | bodyElem.length!==1){
//短时间后再次检查
setTimeout(函数(){
addTextToPopup(句柄,文本);
}, 250);
返回;
}
handle.document.body.innerHTML=winContent[text];
}
函数OpenMultipleWindows(){
var winContent=['Page1','Page2','Page3','Page4'];
对于(变量i=0;i

如果这不起作用,尝试附加一个JS变量,如
domisrady=false
并在弹出html onload事件中将其设置为true,然后使用
newWin.domisrady===true检查是否为true

您的问题是,您没有更改弹出窗口的标识符。 您可以尝试以下方法:

function OpenMultipleWindows() {
    var winContent = ['Page1', 'Page2', 'Page3', 'Page4'];
    for (var i = 0; i < winContent.length; i++) {
        (function (text) {
            var newWin = open('/localFolder/window.html', 'Print' + i, 'width=500,height=500', '_blank');
            newWin.document.body.innerHTML = winContent[text];
        }(i));
    }
}

$(function () {
    OpenMultipleWindows();
});
函数OpenMultipleWindows(){ var winContent=['Page1','Page2','Page3','Page4']; 对于(变量i=0;i 第二个参数是标识符,必须是唯一的

//编辑:添加注释作为注释的答案

您需要等待文档加载到弹出窗口中。我通常会为此添加一个JavaScript元素。但我认为你可以这样做(未经测试):

函数addTextToPopup(句柄,文本){
如果(!handle | | handle.closed)返回;
var bodyElem=handle.document.getElementsByTagName('body');
如果(!bodyElem | | bodyElem.length!==1){
//短时间后再次检查
setTimeout(函数(){
addTextToPopup(句柄,文本);
}, 250);
返回;
}
handle.document.body.innerHTML=winContent[text];
}
函数OpenMultipleWindows(){
var winContent=['Page1','Page2','Page3','Page4'];
对于(变量i=0;i

如果这不起作用,尝试附加一个JS变量,如
domisrady=false
并在弹出html onload事件中将其设置为true,并使用
newWin.domisrady===true检查是否为true

@DaKirsche:现在窗口问题已解决,但文本不会停留太久,打开窗口时文本在窗口中,但在加载窗口后文本似乎丢失了。。。有什么想法吗?我尝试过类似的方法,在不同的标签页中打开不同的URL,但内容会混淆。我通过在循环中打开选项卡之间提供一个时间缓冲区来解决这个问题。500毫秒足以防止混淆的发生。@DaKirsche:现在窗口问题解决了,但文本不会停留太久,打开窗口时文本在窗口中,但加载窗口后文本似乎丢失了。。。有什么想法吗?我尝试过类似的方法,在不同的标签页中打开不同的URL,但内容会混淆。我通过在循环中打开选项卡之间提供一个时间缓冲区来解决这个问题。500毫秒足以防止混淆的发生。
function addTextToPopup(handle, text){
    if (!handle|| handle.closed) return;
    var bodyElem = handle.document.getElementsByTagName('body');
    if (!bodyElem || bodyElem.length !== 1){
        //check again after a short period
        window.setTimeout(function(){
             addTextToPopup(handle, text);
        }, 250);
        return;
    }

    handle.document.body.innerHTML = winContent[text];
}

function OpenMultipleWindows() {
    var winContent = ['Page1', 'Page2', 'Page3', 'Page4'];
    for (var i = 0; i < winContent.length; i++) {
        (function (text) {
            var newWin = open('/localFolder/window.html', 'Print' + i, 'width=500,height=500', '_blank');
            addTextToPopup(newWin, winContent[text]); 
        }(i));
    }
}

$(function () {
    OpenMultipleWindows();
});