PhantomJS将变量传递给page.evaluate by reference

时间:2017-10-21 21:36:11

标签: javascript phantomjs pass-by-reference

我搜索了2天但仍然没有变化,我需要在foo内通过引用page.evaluate变量,但似乎不可能。

var foo = 42;

setInterval(function(){
      console.log('outer '+foo++);

},1000);

page.open(url, function() {

  var pe = page.evaluate(function(foo) {
     setInterval(function(){
          console.log('inner inner '+foo);
      },1000);
  },foo);
  setInterval(function(){
      console.log('inner '+foo);
  },1000);
}.bind(foo));

外部和内部都在更新,但inner inner foo是静态的。我也试过绑定但是它返回了这个错误:

SyntaxError: Expected token ']'

  undefined:2 in evaluateJavaScript
  phantomjs://platform/webpage.js:390 in evaluate
  phantomjs://code/foo.js:37
  :0
  phantomjs://platform/webpage.js:286 in _onPageOpenFinished

修改: 刚发现函数evaluate是一个沙盒,我只是好奇是否有这样的消息传递或IPC之间的某种方式?

1 个答案:

答案 0 :(得分:0)

  

如果在这两者之间有某种方式如消息传递或IPC?

确实有 - jq可以将一个简单的变量或序列化对象返回到外部上下文:

page.evaluate

你没有在你的问题中明确说明它,但是从我接受的代码示例中你想要监视实时页面上的一些变量。有可能:

var value_from_sandbox = page.evaluate(function(){ return 42; });

还有一种方法可以从沙箱中调用“home”:page.callPhantom,但请注意,它仍然在文档中标记为“实验性”。