我已开始使用PhantomJS进行屏幕截图的概念验证工作,我将获得所有必要的配置,例如URL,超时,isScreenshotReqd,isHarFileReqd,isHeadersReqd,用户名,密码和一些与应用程序相关的配置等系统参数。除了customHeaders
之外,其他所有东西都工作正常。
我使用的代码是
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提供不同的标题。
最佳答案
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;