2016-05-25 2 views
0

Я начал работать в небольшом доказательстве концепции, которая использует PhantomJS для создания скриншотов, и я получу все необходимые конфигурации в виде системных аргументов, таких как URL, тайм-аут, isScreenshotReqd, isHarFileReqd, isHeadersReqd, имя пользователя, пароль и некоторые связанные с приложениями конфиги. Все работает нормально, кроме customHeaders.Как передать customHeaders как системные аргументы в скрипте PhantomJS?

кода я использовал

if (system.args.length === 1) { 
    console.log('Usage: phantom.js <some URL>'); 
    phantom.exit(1); 
} else { 
    assembleId = system.args[2]; 
    page.address = system.args[3]; 
    page.settings.resourceTimeout = system.args[4]; 
    isScreenshotReqd = system.args[5]; 
    isHeadersReqd = system.args[6]; 
    isHarFileReqd = system.args[7]; 
    page.settings.userName = system.args[8]; 
    page.settings.password = system.args[9]; 
    var key = "headerKey";//(or system.args[10]) 
    var value = "headerValue";//(or system.args[11]) 
    page.customHeaders = {key : value}; 
    //some operation 
} 

это устанавливает customHeader в

"headers": [{"name": "key","value": "headerValue"}] 

Вы можете увидеть значение установлено правильно, но ключ не берется из инициализированных переменных или system.args[x] вместо этого он предпринимает все переменная, которую я использую.

хотя это работает, если я жёстко в customHeaders как

page.customHeaders = {"headerKey": "headerValue"}; 

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

+0

его не дублированный, В контексте phantomJs решения по ссылке не работает, пожалуйста, проверьте для себя и просветить меня, если я не права. – Zyber

+0

«page.customHeaders = {}; page.customHeaders [key] = value; 'work? –

+0

page.customHeaders = {}; работает , но page.customHeaders [ключ] = значение; не работает. – Zyber

ответ

2

JavaScript не позволяет использовать переменные в качестве ключей объектов. Вы должны установить переменную ключ таким образом:

var key = "some dynamic key"; 
var value = "some value" 
var obj = {}; 
obj[key] = value; 

Дополнительная проблема с PhantomJS»customHeaders является то, что оно должно быть установлено в целом. PhantomJS не замечает, что свойства объекта customHeaders изменены. Вы можете использовать его как это:

var key = "headerKey"; 
var value = "headerValue"; 
var customHeaders = {}; 
customHeaders[key] = value; 
page.customHeaders = customHeaders; 
+0

Спасибо, что работает :) – Zyber

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