Я новичок в PhantomJS и JS в целом и не могу понять, почему querySelector не может получить доступ к моей глобальной переменной элемента. Я попытался передать элемент в пределах функции() безрезультатно. Я включил ниже непривилегированную копию кода.Глобальная переменная недоступна внутри page.open() - PhantomJS
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
Вы также можете передать значение наряду с URL, используемый для открытия страницы. –
да, вы правы, если этот параметр является значением, мы можем передать его в URL-адрес –
@ jeremy-denis. Я не уверен, что понимаю. Я просто попытался переназначить args внутри page.open, и это не решило проблему. Я также попытался передать элемент внутри функции(), и это тоже не решило проблему. – FantasticSponge