我正在尝试从命令行传递参数,并选中或取消选中我本地网站上的复选框。如果我将system.args[4]
函数中的returnVars
替换为true
或false
它可以正常工作,但我从命令行传递的参数不会影响复选框。
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
答案 0 :(得分:0)
您将字符串"false"
传递给evaluate
并将checked
属性设置为此字符串。然后,该字符串将评估为true
,因为!!"false" === true
和!!"true" === true
。如果希望你现在看到问题。
这很容易解决。由于您将JavaScript代码(false
)作为字符串传递,因此您需要执行该字符串,以便它再次成为JavaScript代码:
document.getElementById(r).checked = eval(s);
eval
通常是邪恶的,但由于这是你的本地脚本,所以没有任何东西你可以破坏安全性。