我是PhantomJS和JS的新手,我无法理解为什么querySelector无法访问我的元素全局变量。我试图在各种函数()中传递元素无济于事。我在下面列出了一个未经过骚扰的代码副本。
var page = require('webpage').create();
var args = require('system').args;
var uri = args[1];
var element = args[2];
console.log('Arg 1: '+args[1]);
console.log('Arg 2: '+args[2]);
page.open(uri, function (status) {
if (status !== 'success') {
console.log('Error Opening Page');
} else {
window.setTimeout(function () {
var bounds = page.evaluate(function () {
canvas = document.querySelector('#'+ element);
return canvas.getBoundingClientRect();
});
page.clipRect = {
top: bounds.top,
left: bounds.left,
width: bounds.width,
height: bounds.height
};
page.render('result.png');
phantom.exit();
}, 500);
}
});
结果
$ ./phantomjs test.js http://fabricjs.com/static_canvas c
Arg 1: http://fabricjs.com/static_canvas
Arg 2: c
ReferenceError: Can't find variable: args
undefined:3
:6
TypeError: null is not an object (evaluating 'bounds.top')
phantomjs://code/test.js:23
答案 0 :(得分:3)
您可以通过参数(元素)
传递它var bounds = page.evaluate(function (element) {
canvas = document.querySelector('#'+ element);
return canvas.getBoundingClientRect();
}, element);
答案 1 :(得分:1)
是的,因为当你执行一个page.open你在另一个页面上时,前一个的变量不与第二个共享。
您需要解决的问题是在新页面中重新分配args变量。
但不是在您的情况下,但如果您需要共享的变量是一个值,您可以尝试在URL中传递此值以在新页面中恢复它。