2016-05-15 3 views
0

Я новичок в 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 

ответ

3

Вы можете передать его параметром (элементом)

var bounds = page.evaluate(function (element) { 
    canvas = document.querySelector('#'+ element); 
    return canvas.getBoundingClientRect(); 
}, element); 
1

Да это потому, что при выполнении page.open ваш находятся на другой странице и переменной от предыдущего не разделяют со второй.

Что вам нужно для решения вашей проблемы, это переназначение переменной args на новой странице.

Но не в вашем случае, но если переменная, которую нужно предоставить, - это значение, которое вы можете попробовать передать это значение в URL-адресе, чтобы восстановить его на новой странице.

+0

Вы также можете передать значение наряду с URL, используемый для открытия страницы. –

+0

да, вы правы, если этот параметр является значением, мы можем передать его в URL-адрес –

+0

@ jeremy-denis. Я не уверен, что понимаю. Я просто попытался переназначить args внутри page.open, и это не решило проблему. Я также попытался передать элемент внутри функции(), и это тоже не решило проблему. – FantasticSponge

Смежные вопросы