将参数从PhantomJS命令行传递到页面评估以更改复选框状态

时间:2014-11-17 20:47:05

标签: javascript phantomjs

我正在尝试从命令行传递参数,并选中或取消选中我本地网站上的复选框。如果我将system.args[4]函数中的returnVars替换为truefalse它可以正常工作,但我从命令行传递的参数不会影响复选框。

var returnVars = function(){
    if (system.args.length > 4) {
        console.log(system.args[4]); // this is getting the correct value from the args
        return system.args[4];
    }
};

page.open(address, function (status) {
    if (status !== 'success') {
        console.log('Unable to load the address!');
        phantom.exit(1);
    } else {
        var  returnable = page.evaluate(function(r,s) {
            return document.getElementById(r).checked = s;
        }, 'returnable', returnVars());

        window.setTimeout(function () {
            page.render(output);
            phantom.exit();
        }, 200);
    }
});

我正在使用rasterize.js示例并将zoom选项替换为我自己的。我称之为:

phantomjs rasterize.js mywebsite.com c:\foo.pdf "letter" false

1 个答案:

答案 0 :(得分:0)

您将字符串"false"传递给evaluate并将checked属性设置为此字符串。然后,该字符串将评估为true,因为!!"false" === true!!"true" === true。如果希望你现在看到问题。

这很容易解决。由于您将JavaScript代码(false)作为字符串传递,因此您需要执行该字符串,以便它再次成为JavaScript代码:

document.getElementById(r).checked = eval(s);

eval通常是邪恶的,但由于这是你的本地脚本,所以没有任何东西你可以破坏安全性。