Øyv*_*tad 24 javascript google-analytics-api google-optimize
我使用Google Optimize创建了A/B测试.现在我想在Javascript中阅读当前的ExperimentId和variationId.我的目标是根据给定的变体运行不同的javascript.
我似乎无法在文档中找到任何相关信息.可能吗?
Øyv*_*tad 12
编辑:没关系下面我基于cookie的答案,我找到了一个更好的解决方案.
这样做:
var propertyId = "UA-1234567-33";
var experimentId = Object.keys(gaData[propertyId].experiments)[0];
var variationId = gaData[propertyId].experiments[experimentId];
Run Code Online (Sandbox Code Playgroud)
(不要这样做..保留在这里供参考)
Maximes的答案是有效的,但并不完全是我想要的.我希望能够在不通过可视化编辑器添加代码的情况下找到experimentId和variationId.我终于找到了办法.
这些值实际存储在_gaexp cookie中.实验运行时会出现cookie.您可以通过打开开发人员工具,转到" 应用程序"选项卡并单击左侧窗格中的" Cookie"在Chrome中进行检查.它看起来像这样:
GAX1.2.S1SJOWxJTVO9tM2QKV3NcP.17723.1
实验ID是第二个数字后面的部分:
S0SJOWxJTVO1tM2QKD2NcQ
变体id是最后一个数字:
1
我写了这段代码来从cookie中提取它:
function getCookieValue(cookieName) {
var result = document.cookie.match('(^|;)\\s*' + cookieName + '\\s*=\\s*([^;]+)');
return result ? result.pop() : '';
}
function getExperimentId() {
var cookie = getCookieValue('_gaexp');
if (cookie == undefined) {
return undefined;
} else {
var fields = cookie.split('.');
return fields[2];
}
}
function getVariationId() {
var cookie = getCookieValue('_gaexp');
if (cookie == undefined) {
return undefined;
} else {
var fields = cookie.split('.');
return fields[4];
}
}
var experimentId = getExperimentId();
var variationId = getVariationId();
Run Code Online (Sandbox Code Playgroud)
警告:从cookie中获取实验ID和变量ID不是一个好主意.有两个原因.
GAX1.2.S1SJOWxJTVO9tM2QKV3NcP.17723.1!vr1mB2L2RX6kSI1ZnUDTzT.18721.0
这与你一次运行实验时的外观相同.这使得很难推断出使用什么样的实验.
小智 8
现在,还有一个可用的Google Optimize javascript API,它是一个更好的选择:
创建实验后(开始之前),experimentId现在可在Optimize UI中使用。
该页面中已经提供了该API,您可以像这样使用它:
google_optimize.get('<experimentId>');
Run Code Online (Sandbox Code Playgroud)
(注意:这仅在加载Optimize容器脚本之后才有效)
您还可以使用以下方法注册回调,以便在任何时候(甚至在加载Optimize脚本之前)运行所需的javascript。
function gtag() {dataLayer.push(arguments)}
function implementExperimentA(value) {
if (value == '0') {
// Provide code for visitors in the original.
} else if (value == '1') {
// Provide code for visitors in first variant.
}
gtag('event', 'optimize.callback', {
name: '<experiment_id_A>',
callback: implementExperimentA
});
Run Code Online (Sandbox Code Playgroud)
如果您想同时找到experimentId和变体,则可以为任何实验注册一个回调:
function implementManyExperiments(value, name) {
if (name == '<experiment_id_A>') {
// Provide implementation for experiment A
if (value == '0') {
// Provide code for visitors in the original.
} else if (value == '1') {
// Provide code for visitors in first variant.
...
} else if (name == '<experiment_id_B>') {
// Provide implementation for experiment B
...
}
gtag('event', 'optimize.callback', {
callback: implementManyExperiments
});
Run Code Online (Sandbox Code Playgroud)
更多细节
https://support.google.com/optimize/answer/9059383
Google Optimize允许您基于每个DOM元素运行任意JS.
此功能旨在修改DOM元素,但没有什么能阻止您使用它来调用JS函数或定义一些变量.
假设您doSomething()的页面上有方法定义,您可以将Google优化功能看起来像这样:
doSomething("Experiment #1", "Variant A");
或者,您可以尝试全局定义变量.
// We need to use `windows` here, because if we define a variable
// with `var`, it will be limited to the scope of the Google Optimize
// function.
window["google_optimize_exp_id"] = "Experiment #1";
window["google_optimize_exp_var_id"] = "Variant A";
Run Code Online (Sandbox Code Playgroud)
如果您使用第二种方法,请记住,您需要等到Google Optimized功能运行后再运行您自己的逻辑.
| 归档时间: |
|
| 查看次数: |
6940 次 |
| 最近记录: |