我想访问从WL客户端发送的请求标头。当我使用这个
var request = WL.Server.getClientRequest();
在适配器过程调用中,它返回null并在
之后的行上导致错误var userAgent = request.getHeader("User-Agent");
错误为:无法调用null
的方法“getHeader”为了使用此WL api呼叫,是否需要任何特殊设置?
答案 0 :(得分:1)
API WL.Server.getClientRequest()
仅在从客户端(来自设备或甚至预览)调用时才有效,而不是直接从Eclipse调用时。
例如:
在适配器XML中,我创建了一个过程:
<procedure name="getUserAgent"/>
在适配器JavaScript中,我创建了一个名为getUserAgent
的函数,它将userAgent返回给客户端:
function getUserAgent() {
var request = WL.Server.getClientRequest(),
userAgent = request.getHeader("User-Agent");
return {userAgent : userAgent};
}
在客户端Javascript中,我创建了一个从wlCommonInit
调用的函数。该函数调用适配器过程,返回的userAgent显示在警报中:
function wlCommonInit(){
getUserAgent();
}
function getUserAgent () {
WL.Client.invokeProcedure(
{
adapter: 'getClientRequest',
procedure: 'getUserAgent',
},
{
onSuccess : onSuccessGetUserAgent,
onFailure : onFailureGetUserAgent
}
);
}
function onSuccessGetUserAgent (data) {
alert('userAgent: ' + data.invocationResult.userAgent);
}
function onFailureGetUserAgent () {
alert('Failure');
}
答案 1 :(得分:0)
看起来Studio中使用的适配器调用阻止了对传入客户端请求的访问。基本上,当您使用Eclipse的“Invoke Worklight Procedure”选项时,getClientRequest()不起作用。你可以在这里做的是 - 一旦你做“调用Worklight程序”,浏览器将打开一个类似于此的URL
http://{serverIP}:{serverPort}/{projectName}/dev/invoke?adapter={adapterName}&procedure={procedureName}¶meters={params}
从URL中删除/ dev组件。因此,您的网址将如下所示
http://{serverIP}:{serverPort}/{projectName}/invoke?adapter={adapterName}&procedure={procedureName}¶meters={params}
这将确保不通过开发预览调用适配器,而是直接从WL服务器调用适配器,getClientRequest()API将完全正常运行。
P.S。当“调用Worklight过程”未打开外部浏览器窗口而是在Eclipse窗口中显示调用结果时,您可能会遇到一种行为。这取决于您正在使用的Eclipse版本,并且可以在Eclipse的首选项中轻松更改 - &gt;一般 - &gt;网络浏览器 - &gt;使用外部网络浏览器。