监控Web SDK的挂接
Adobe Experience Platform Web SDK包含监视挂钩,您可以使用这些挂钩监视各种系统事件。 这些工具可用于开发您自己的调试工具和捕获Web SDK日志。
无论是否启用了调试,Web SDK都会触发监视功能。
onInstanceCreated
onInstanceCreated
当您成功创建新的Web SDK实例时,将触发此回调函数。 有关函数参数的详细信息,请参阅下面的示例。
onInstanceCreated(data) {
// data.instanceName
// data.instance
}
data.instanceName
data.instance
onInstanceConfigured
onInstanceConfigured
成功解析configure
命令后,Web SDK会触发此回调函数。 有关函数参数的详细信息,请参阅下面的示例。
onInstanceConfigured(data) {
// data.instanceName
// data.config
}
data.instanceName
onBeforeCommand
onBeforeCommand
此回调函数由Web SDK在执行任何其他命令之前触发。 可以使用此函数检索特定命令的配置选项。 有关函数参数的详细信息,请参阅下面的示例。
onBeforeCommand(data) {
// data.instanceName
// data.commandName
// data.options
}
data.instanceName
data.commandName
data.options
onCommandResolved
onCommandResolved
解析命令承诺时会触发此回调函数。 您可以使用此函数查看命令选项和结果。 有关函数参数的详细信息,请参阅下面的示例。
onCommandResolved(data) {
// data.instanceName
// data.commandName
// data.options
// data.result
},
data.instanceName
data.commandName
data.options
data.result
onCommandRejected
onCommandRejected
此回调函数在命令promise被拒绝之前触发,它包含有关命令被拒绝原因的信息。 有关函数参数的详细信息,请参阅下面的示例。
onCommandRejected(data) {
// data.instanceName
// data.commandName
// data.options
// data.error
}
data.instanceName
data.commandName
data.options
data.error
fetch
,大多数情况下)返回的错误消息,以及命令被拒绝的原因。onBeforeNetworkRequest
onBeforeNetworkRequest
此回调函数在执行网络请求之前触发。 有关函数参数的详细信息,请参阅下面的示例。
onBeforeNetworkRequest(data) {
// data.instanceName
// data.requestId
// data.url
// data.payload
}
data.instanceName
data.requestId
requestId
。data.url
data.payload
POST
方法发送的网络请求有效负载对象。onNetworkResponse
onNetworkResponse
此回调函数在浏览器收到响应时触发。 有关函数参数的详细信息,请参阅下面的示例。
onNetworkResponse(data) {
// data.instanceName
// data.requestId
// data.url
// data.payload
// data.body
// data.parsedBody
// data.status
// data.retriesAttempted
}
data.instanceName
data.requestId
requestId
。data.url
data.payload
POST
方法在请求正文中发送的有效负荷对象。data.body
data.parsedBody
data.status
data.retriesAttempted
onNetworkError
onNetworkError
当网络请求失败时,将触发此回调函数。 有关函数参数的详细信息,请参阅下面的示例。
onNetworkError(data) {
// data.instanceName
// data.requestId
// data.url
// data.payload
// data.error
},
data.instanceName
data.requestId
requestId
。data.url
data.payload
POST
方法在请求正文中发送的有效负荷对象。data.error
fetch
,大多数情况下)返回的错误消息,以及命令被拒绝的原因。onBeforeLog
onBeforeLog
此回调函数在Web SDK将任何内容记录到控制台之前触发。 有关函数参数的详细信息,请参阅下面的示例。
onBeforeLog(data) {
// data.instanceName
// data.componentName
// data.level
// data.arguments
}
data.instanceName
data.componentName
data.level
log
、info
、warn
、error
。data.arguments
onContentRendering
onContentRendering
此回调函数由personalization
组件在渲染的各个阶段触发。 有效负载可能因status
参数而异。 有关函数参数的详细信息,请参阅下面的示例。
onContentRendering(data) {
// data.instanceName
// data.componentName
// data.payload
// data.status
}
data.instanceName
data.componentName
data.payload
POST
方法在请求正文中发送的有效负荷对象。data.status
personalization
组件通知Web SDK渲染的状态。 支持的值:
rendering-started
:指示Web SDK即将呈现建议。 在Web SDK开始呈现决策范围或视图之前,您可以在data
对象中看到将由personalization
组件和范围名称呈现的建议。no-offers
:表示未收到所请求参数的有效负载。rendering-failed
:表示Web SDK无法呈现建议。rendering-succeeded
:表示已针对决策范围完成渲染。rendering-redirect
:指示Web SDK将渲染重定向建议。
onContentHiding
onContentHiding
当应用或删除预隐藏样式时,将触发此回调函数。
onContentHiding(data) {
// data.instanceName
// data.componentName
// data.status
}
data.instanceName
data.componentName
data.status
personalization
组件通知Web SDK渲染的状态。 支持的值:
hide-containers
show-containers
如何在使用NPM包时指定监视挂接 specify-monitoris-npm
如果您通过NPM包使用Web SDK,则可以在createInstasnce
函数中指定监视挂接,如下所示。
var monitor = {
onBeforeCommand(data) {
console.log(data);
},
...
};
var alloyLibrary = require("@adobe/alloy");
var alloy = alloyLibrary.createInstance({ name: "alloy", monitors: [monitor] });
alloy("config", { ... });
alloy("sendEvent", { ... });
示例 example
Web SDK在名为__alloyMonitors
的全局变量中查找对象数组。
要捕获所有Web SDK事件,必须先定义监视挂接,然后才能将Web SDK代码加载到页面上。 每个监视方法都会捕获Web SDK事件。
您可以在页面上加载 Web SDK代码之后定义监视挂接,但在页面加载之前触发的任何挂接将 不会捕获。
定义监视挂接对象时,只需要定义要为其定义特殊逻辑的方法。
例如,如果您只关心onContentRendering
,则可以只定义该方法。 您无需一次使用所有监控挂接。
您可以定义多个监视挂接对象。 当触发相应的事件时,将调用给定方法的所有对象。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
window.__alloyMonitors = window.__alloyMonitors || [];
window.__alloyMonitors.push({
onInstanceCreated(data) {
// data.instanceName
// data.instance
},
onInstanceConfigured(data) {
// data.instanceName
// data.config
},
onBeforeCommand(data) {
// data.instanceName
// data.commandName
// data.options
},
// Added in version 2.4.0
onCommandResolved(data) {
// data.instanceName
// data.commandName
// data.options
// data.result
},
// Added in version 2.4.0
onCommandRejected(data) {
// data.instanceName
// data.commandName
// data.options
// data.error
},
onBeforeNetworkRequest(data) {
// data.instanceName
// data.requestId
// data.url
// data.payload
},
onNetworkResponse(data) {
// data.instanceName
// data.requestId
// data.url
// data.payload
// data.body
// data.parsedBody
// data.status
// data.retriesAttempted
},
onNetworkError(data) {
// data.instanceName
// data.requestId
// data.url
// data.payload
// data.error
},
onBeforeLog(data) {
// data.instanceName
// data.componentName
// data.level
// data.arguments
}
onContentRendering(data) {
// data.instanceName
// data.componentName
// data.payload
// data.status
},
onContentHiding(data) {
// data.instanceName
// data.componentName
// data.status
}
});
</script>
<script>
!function(n,o){o.forEach(function(o){n[o]||((n.__alloyNS=n.__alloyNS||
[]).push(o),n[o]=function(){var u=arguments;return new Promise(
function(i,l){n[o].q.push([i,l,u])})},n[o].q=[])})}
(window,["alloy"]);
</script>
<script src="alloy.js" async></script>
</head>
<body>
<h1>Monitor Test</h1>
</body>
</html>