首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CasperJS: evaluate()返回空值

CasperJS: evaluate()返回空值
EN

Stack Overflow用户
提问于 2017-08-11 22:30:22
回答 1查看 699关注 0票数 1

举个例子,为什么是categoryId null

代码语言:javascript
复制
var scripts = this.evaluate(function() {
    var raScripts = "A lengthy script";

    return raScripts;
});

var categoryId = this.evaluate(function() {
    var text = 'more text';
    var lengthyScript = scripts + ' ' + text;

    return lengthyScript;
});

this.echo('Status: ' + categoryId);
// categoryId is null
EN

回答 1

Stack Overflow用户

发布于 2017-08-12 00:02:08

我认为这是因为您的scripts变量没有在浏览器环境中定义(它只在您的Casper环境中定义)。实际上,当您使用evaluate时,上下文是DOM,而不是Casper实例。

这将返回null

代码语言:javascript
复制
var casper = require('casper').create();
var tag = 'h1'; // This is our global variable...

casper.start('http://example.com/');

casper.waitForSelector('body', function () {
  this.echo(this.evaluate(function () {
    return document.querySelector(tag).textContent; // Oops!
  }));
});

casper.run();

但是如果我们在evaluate的上下文中注入我们的变量,我们会得到预期的结果(即“示例域”):

代码语言:javascript
复制
var casper = require('casper').create();

casper.start('http://example.com/');

casper.waitForSelector('body', function () {
  this.echo(this.evaluate(function (tag) {
    return document.querySelector(tag).textContent;
  }, 'h1'));
});

casper.run();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45637691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档