为什么Phantom.js不评估我的Backbone应用程序的工作?

TIM*_*MEX 4 html javascript node.js backbone.js phantomjs

page.open(My_url, function(status) {
                        page.evaluate(function() { 
                            var html = document.documentElement.outerHTML;
                            return html;
                        }, function(result){
                            res.send(result);
                        });
                    });
Run Code Online (Sandbox Code Playgroud)

我有一个Backbone应用程序."My_url"指向该主干页面.

当我运行此代码时,outerHTML不包括渲染的视图.它只有基本的css/scripts /容器持有者.

这就像Backbone应用程序根本没有运行.如何让evaluate()返回完全渲染的Backbone应用程序(在所有ajax调用和东西之后)?

毕竟,这就是Phantom.js的重点

PP.*_*PP. 6

加载后立即评估页面并不总是足够的.有时,由于JavaScript在页面上的编写方式,您必须等待并允许页面的JavaScript执行.为此,我建议您在执行评估之前尝试添加等待.例如

function ( status ) {
  if ( status === 'fail' ) {
    phantom.exit( 1 );
    return; // essential, if you don't, below will be executed
  }

  window.setTimeout(
    function () {
      var result = page.evaluate(
        function () {
          var html = document.documentElement.outerHTML;
          return html;
        }
      );
      res.send( result );
    },
    1000 // wait 1,000ms (1s)
  );
}
Run Code Online (Sandbox Code Playgroud)

如果你发现有必要等待那么你可能想等一下.为此waitFor,在Internet上查找一个或类似的功能,允许您的脚本连续轮询,直到出现特定的DOM元素.