Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
幻影js在循环结束前不注入javascript_Javascript_For Loop_Phantomjs - Fatal编程技术网

幻影js在循环结束前不注入javascript

幻影js在循环结束前不注入javascript,javascript,for-loop,phantomjs,Javascript,For Loop,Phantomjs,我试图创建虚拟网页,试图在服务器上测试负载平衡,我循环遍历pages元素的100个实例,并相应地创建它。我在注入JS时遇到了困难,因为除了循环中的最后一个之外,它并没有完全做到这一点 for(var i=0; i<instances; i++) { pages.push(require('webpage').create()); } console.log('Loading web page'); for(var i in pages) { pages[i].custom

我试图创建虚拟网页,试图在服务器上测试负载平衡,我循环遍历pages元素的100个实例,并相应地创建它。我在注入JS时遇到了困难,因为除了循环中的最后一个之外,它并没有完全做到这一点

for(var i=0; i<instances; i++) {
    pages.push(require('webpage').create());
}

console.log('Loading web page');
for(var i in pages) {
    pages[i].customHeaders = {
        'X-Forwarded-For': '192.111.111.'+i
    };
    var ip = '192.111.111.'+i;
    var mac = "00:00:00:00:00:"+i;
    var serial = '000000000'+i;

    console.log("Loading " + url + " in page " + i);
    pages[i].onInitialized = function() {
    if(!pages[i].injectJs("amino/VideoDisplay.js")) {
        console.log("Can not include script 'VideoDisplay.js'");
        phantom.exit(1);
    }
    if(!pages[i].injectJs("amino/TVI.js")) {
        console.log("Can not include script 'TVI.js'");
        phantom.exit(1);
    }
    if(!pages[i].injectJs("amino/PVR.js")) {
        console.log("Can not include script 'PVR.js'");
        phantom.exit(1);
    }
    if(!pages[i].injectJs("amino/CEC.js")) {
        console.log("Can not include script 'CEC.js'");
        phantom.exit(1);
    }
    if(!pages[i].injectJs("amino/Browser.js")) {
        console.log("Can not include script 'Browser.js'");
        phantom.exit(1);
    }
    if(!pages[i].injectJs("amino/AVMedia.js")) {
        console.log("Can not include script 'AVMedia.js'");
        phantom.exit(1);
    }
    if(!pages[i].injectJs("amino/AudioControl.js")) {
        console.log("Can not include script 'AudioControl.js'");
        phantom.exit(1);
    }
    if(!pages[i].injectJs("amino/ASTB.js")) {
        console.log("Can not include script 'ASTB.js'");
        phantom.exit(1);
    }
    if(!pages[i].injectJs("amino/AminoGeneric.js")) {
        console.log("Can not include script 'AminoGeneric.js'");
        phantom.exit(1);
    }

};

pages[i].viewportSize = 'width: 1280, height: 720';
    pages[i].settings.userAgent = 'Opera/9.80 (Linux sh4 ; U;  Amino; en) Presto/2.5.21 Version/10.30';
    pages[i].open(url, function () { 
    pages[i].evaluate(function(ip, mac, serial) {
        ASTB.IpAddress = ip;
        ASTB.MacAddress = mac;
        ASTB.Serial = serial
    }, ip, mac, serial);
    });
}

用于(var i=0;i您陷入了闭包陷阱。当您有一个引用循环变量的匿名函数时,它在词汇上绑定到循环中该变量的值。因此,当循环变量更改时,匿名函数关闭的值也会更改,因为它指向完全相同的变量。对
.evaluate
也是异步的,因此它在循环完成后运行,此时
i
指向最后一个元素。您可以使用另一个函数强制这样的范围:

(function(i) {

   page[i].evaluate(...);

})(i);
evaluatePage(page, i);

...

function evaluatePage(page, i) {
    page[i].evaluate(...);
}
或者您可以调用另一个函数:

(function(i) {

   page[i].evaluate(...);

})(i);
evaluatePage(page, i);

...

function evaluatePage(page, i) {
    page[i].evaluate(...);
}

我在这里有点挣扎,我知道你从哪里来,但是我尝试了两种方法,仍然没有进一步的进展。
pages[I].open(url,function(status,I){console.log(status)(function(I){console.log(I);pages[I].evaluate(function(ip,mac,serial){ASTB.IpAddress=ip;ASTB.MacAddress=mac;ASTB.Serial=Serial},ip,mac,Serial);})(i);});