Javascript 找不到全局定义的变量

Javascript 找不到全局定义的变量,javascript,arrays,node.js,global-variables,phantomjs,Javascript,Arrays,Node.js,Global Variables,Phantomjs,我已经声明了一个全局变量,var linkArray=[],但它没有在phantomJS函数中被提取。错误消息是:phantom标准输出:引用错误:找不到变量:linkArray。我怎样才能找到这个?我尝试用window.linkArray声明它,但由于这是一个无头应用程序,因此我得到了另一个错误,ReferenceError:window未定义 因此,我需要一种使var linkArray=[]全局化的方法 var phantom = require('phantom'); var link

我已经声明了一个全局变量,
var linkArray=[]
,但它没有在
phantomJS
函数中被提取。错误消息是:
phantom标准输出:引用错误:找不到变量:linkArray
。我怎样才能找到这个?我尝试用
window.linkArray
声明它,但由于这是一个无头应用程序,因此我得到了另一个错误,
ReferenceError:window未定义

因此,我需要一种使
var linkArray=[]
全局化的方法

var phantom = require('phantom');

var linkArray=[];

phantom.create(function (ph) {
    ph.createPage(function (page) {
        var main_file="file:///C:/whatever/index.html";
        page.open(main_file, function (status) {
            console.log("opened " + main_file +"\n",status+"\n");
            page.evaluate(function () { 
                for (var i=0; i < document.getElementsByTagName('a').length; i++) {
                    linkArray.push(document.getElementsByTagName('a')[i].href)
                }
                return linkArray; 
            }
            , function (result) {
                console.log(result)
                ph.exit();
            });

        });
    });
}, {
    dnodeOpts: {
        weak: false
    }        
});
var phantom=require('phantom');
var linkArray=[];
幻影创建(功能(ph){
ph.createPage(函数(第页){
var main_文件=”file:///C:/whatever/index.html";
页面打开(主文件、功能(状态){
console.log(“已打开”+主\u文件+“\n”,状态+“\n”);
求值(函数(){
对于(var i=0;i
PhantomJS有页面上下文和外部上下文。页面上下文是沙盒式的,因此需要显式地将变量传递给它。它是按值传递的。他们说:

在网页上下文中计算给定函数。执行是沙盒式的,网页无法访问幻影对象,也无法探测自己的设置

但也要注意这一点

注意:evaluate函数的参数和返回值必须是简单的原语对象。经验法则:如果可以通过JSON对其进行序列化,那么就可以了

闭包、函数、DOM节点等将无法工作

要解决这个问题,必须将外部变量传递到页面上下文(
evaluate
)并返回

page.evaluate(function(linkArray) { 
    // page context, linkArray is a local variable now
    for (var i=0; i < document.getElementsByTagName('a').length; i++) {
        linkArray.push(document.getElementsByTagName('a')[i].href)
    }
    return linkArray;
}, function finished(result) {
    // outer context
    console.log(result)
    linkArray = result;
    ph.exit();
}, linkArray); // pass values for the page context as last parameters
page.evaluate(函数(linkArray){
//页面上下文,linkArray现在是一个局部变量
对于(var i=0;i
我正在使用node,所以我使用
npm
安装
phantom
,然后声明
var phantom=require('phantom')。还有很多。我发现这两个问题的答案是一样的。嗯,这是在识别linkArray,但由于某种原因,如果在最后一行(
},linkArray)之后运行
console.log(linkArray)
,则返回一个空数组)这是因为它是异步的,您中断了控制流(在
完成的
函数中)。太棒了!谢谢你的帮助:)PhantomJS通向回调地狱,尤其是那些桥梁。你可以试试另一座像这样的桥。它有一个类似于CasperJS的高级API。