2016-01-12 39 views
0

我已经使用节点编写了一个phantomjs脚本来截取网页截图。我试图截图的页面包含一个重要的外部脚本,它将变量添加到全局窗口对象中。即。窗口.__组件。带外部脚本的PhantomJS节点

问题是,这是从未设置的。它在浏览器中运行良好,但它只是在幻影中死亡。我在打开页面之前修改了脚本以注入脚本,我添加了一个检查以确保在打开页面之前添加了组件对象,但仍然失败。

任何想法?

function injectExternalScripts(page, ph, url) { 
    page.includeJs('http://external-script',()=>{ 

     page.evaluate(() => { 
      return window; 
     }, function(result) { 
      if(result.__components) { 
       openPage(page, ph, url); 
      } 
     }); 

    }); 
} 

function openPage(page, ph, url) { 
    page.open(url, (status)=>{ 
     // errors returned from page 
     // window.__components is null 
    }); 
} 

回答

1

您只能从PhantomJS的页面上下文中返回原始对象。 window和DOM节点不是原始对象,并且如果__components也不是原始对象,那么您也无法返回该对象。

如果__components设置与此您可以检查:

page.evaluate(() => { 
    return !!window.__components; 
}, function(result) { 
    if(result) { 
     openPage(page, ph, url); 
    } 
});