首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将参数传递给page.includeJs()和page.evaluate()中的匿名函数

将参数传递给page.includeJs()和page.evaluate()中的匿名函数
EN

Stack Overflow用户
提问于 2012-09-01 05:45:43
回答 1查看 8.9K关注 0票数 17

一点背景..。我对javascript和phantom.js都是个新手,所以我不知道这是javascript还是phantom.js bug (特性?)。

下面的代码成功完成(很抱歉,缺少phantom.exit(),一旦完成,您就必须使用ctrl+c ):

代码语言:javascript
复制
var page = require('webpage').create();
var comment = "Hello World";

page.viewportSize = { width: 800, height: 600 };
page.open("http://www.google.com", function (status) { 
    if (status !== 'success') {
        console.log('Unable to load the address!');
        phantom.exit();
    } else {
        page.includeJs('http://code.jquery.com/jquery-latest.min.js', function() {
            console.log("1: ", comment);
        }, comment);

        var foo = page.evaluate(function() {            
            return arguments[0];
        }, comment);

        console.log("2: ", foo);            
    }
});

这是可行的:

代码语言:javascript
复制
page.includeJs('http://code.jquery.com/jquery-latest.min.js', function() {
    console.log("1: ", comment);
}, comment);

输出1: Hello World

但不是:

代码语言:javascript
复制
page.includeJs('http://code.jquery.com/jquery-latest.min.js', function(c) {
    console.log("1: ", c);
}, comment);

输出1: http://code.jquery.com/jquery-latest.min.js

而不是:

代码语言:javascript
复制
page.includeJs('http://code.jquery.com/jquery-latest.min.js', function() {
    console.log("1: ", arguments[0]);
}, comment);

输出1: http://code.jquery.com/jquery-latest.min.js

看第二部分,这是可行的:

代码语言:javascript
复制
var foo = page.evaluate(function() {            
    return arguments[0];
}, comment);

console.log("2: ", foo);

输出2: Hello World

还有这个:

代码语言:javascript
复制
var foo = page.evaluate(function(c) {           
    return c;
}, comment);

console.log("2: ", foo);

输出2: Hello World

但不是这样的:

代码语言:javascript
复制
var foo = page.evaluate(function() {            
    return comment;
}, comment);

console.log("2: ", foo);

输出

ReferenceError:找不到变量:注释

phantomjs://webpage.valuate():2

phantomjs://webpage.valuate():3

phantomjs://webpage.valuate():3

2:空

好消息是,我知道什么是有效的,什么是无效的,但是如何保持一点一致性呢?

为什么includeJsevaluate会有不同

向匿名函数传递参数的正确方式是什么?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12222856

复制
相关文章

相似问题

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