Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Omniture'中是否有方法;s.s.代码以查看是否触发了页面视图?_Javascript_Adobe Analytics - Fatal编程技术网

Javascript Omniture'中是否有方法;s.s.代码以查看是否触发了页面视图?

Javascript Omniture'中是否有方法;s.s.代码以查看是否触发了页面视图?,javascript,adobe-analytics,Javascript,Adobe Analytics,我正在寻找开发一个Omniture“麻烦”标签,它将在Google tag Manager中启动。此标记应检查页面上的Omniture s.code是否触发了页面视图。如果没有,请向我们的GA帐户发送事件 理想情况下,它应该是这样的(伪代码如下所示): window.onload=function(){if(OmniturePageViewHasFired==false){ ga('send'、'event'、'SCodeMissing'、'Page',window.location.href

我正在寻找开发一个Omniture“麻烦”标签,它将在Google tag Manager中启动。此标记应检查页面上的Omniture s.code是否触发了页面视图。如果没有,请向我们的GA帐户发送事件

理想情况下,它应该是这样的(伪代码如下所示):


window.onload=function(){if(OmniturePageViewHasFired==false){
ga('send'、'event'、'SCodeMissing'、'Page',window.location.href);
}}

仅仅检查s.code是否在页面上是一项容易得多的任务,但不会有太大的用处,因为代码可能在页面上而没有被触发。有什么想法吗?还要注意的是,我没有访问s.code本身的权限,因此我无法使用它设置一个变量,然后由该脚本拾取。

您可以添加自己的代码来跟踪Omniture是否已触发

有一个插件特性,Omniture用于在跟踪事件上触发插件和其他代码。每次触发页面视图、单击事件或任何其他类型的Omniture事件时,都会触发此函数

您需要确保在其他地方没有使用它来启用Omniture插件,如果是,您必须能够更新该代码。基本上,您可以执行以下操作,只要确保以下代码位加载并执行(在)s_code.js文件加载并执行:

var om_fired = false;

s.usePlugins=true;
function s_doPlugins(s) {
     om_fired = true;
}
s.doPlugins=s_doPlugins;
然后在你的谷歌代码中检查om_fired是否为真/假

另一种方法(在这里添加它,因为它太长了,无法发表评论)


在加载s.code之前,添加一些脚本来读取Omniture设置的cookie,我不记得确切的cookie名称,但设置了多个cookie。读取cookie的代码需要位于标头中,以便在页面加载时(以及在站点cat跟踪代码之前)和页面加载完成之前触发cookie。阅读omniture cookie,并检查值,其中有一个值表示自上次命中以来的时间,我相信cookie变量类似于s.tlh。将该值存储起来,然后在页面加载后再次调用读取cookie并检查tlh值是否更改。如果发生,则发生跟踪事件。如果它没有改变,那么您的事件就不会触发。您的挑战是确保代码按正确的顺序触发,即1。读取cookie/存储值,2。现场猫火,3。再次阅读cookie并比较#1中的w/cookie。

根据Adobe的查找方式,我会这样做:

function OmniturePageViewHasFired() {
  var i=document.images;
  for (var c=0,l=i.length;c<l;c++) {
    if ( (i[c].src.indexOf('/b/ss/')>=0)
         && (!i[c].src.match(/[&?]pe=/))
    ) return true;
  }
  for (var o in window) {
    if ( (o.substring(0,4)=='s_i_')
         && (window[o].src)
         && (window[o].src.indexOf('/b/ss/')>=0)
         && (!window[o].src.match(/[&?]pe=/))
    ) return true;
  }
  return false;
}

//example:
if (OmniturePageViewHasFired() == false){
  // no omn request detected
} else {
  // found at least 1
}
函数OmniturePageViewHasFired(){
var i=document.images;
对于(变量c=0,l=i.length;c=0)
&&(!i[c].src.match(/[&?]pe=/)
)返回true;
}
用于(窗口中的var o){
if((o.子串(0,4)='s_i_'))
&&(窗口[o].src)
&&(窗口[o].src.indexOf('/b/ss/')>=0)
&&(!window[o].src.match(/[&?]pe=/)
)返回true;
}
返回false;
}
//例如:
如果(OmniturePageViewHasFired()==false){
//未检测到omn请求
}否则{
//找到至少1个
}
注意1:只有在发出页面视图(
s.t
)请求时,才会返回true。对于单击请求(
s.tl
),它不会返回true。如果您希望它对任何请求返回true,则删除2个条件中的最后一个
&&&

注2:Adobe官方认为只要在
src
中查找
/b/ss/
就足够了。诚然,在我多年来对Adobe Analytics(顺便说一句,这就是它现在的名称,不是Omniture)进行质量保证的过程中,我只见过一两次这样的假阳性


如果这让您担心,您可以通过为您的实现评估
src
的域,使条件更加具体。这是您的实现所独有的,这就是为什么Adobe不寻求更具体的东西。只需查看页面上的请求即可获得它

几乎可以肯定的是,s_doPlugins已经在使用。但即使不是这样,连接到它也不能保证确实发出了请求。将其添加到原始答案的上面,因为此处太长:)adobe analytics代码确实设置了一些cookies,但默认情况下,它们都没有记录上次点击的时间戳。根据您的设置,您甚至可能无法读取它们。现在,有很多插件和自定义代码记录了一些您可能会看到的东西,但这是特定于实现的。此外,这也不能保证请求确实被触发。利用doPlugins或Cookie之类的东西的总体问题是,处理设置Cookie和执行doPlugins的代码发生在实际请求之前。从那时起到图像请求之间可能会发生各种事情。这太疯狂了。我非常喜欢这种方法,因为我们将像素请求包含在外部脚本文件中,所以搜索/b/ss/可能不起作用,但我认为脚本化方法会起作用。谢谢大家!@denverfone说得很清楚,这不是在搜索javascript包含,比如
/path/to/s_code.js
。这是查找对Adobe服务器的实际像素请求。因此,无论代码在哪个js文件或哪个域上,都不重要;这将查找实际触发的信标url
function OmniturePageViewHasFired() {
  var i=document.images;
  for (var c=0,l=i.length;c<l;c++) {
    if ( (i[c].src.indexOf('/b/ss/')>=0)
         && (!i[c].src.match(/[&?]pe=/))
    ) return true;
  }
  for (var o in window) {
    if ( (o.substring(0,4)=='s_i_')
         && (window[o].src)
         && (window[o].src.indexOf('/b/ss/')>=0)
         && (!window[o].src.match(/[&?]pe=/))
    ) return true;
  }
  return false;
}

//example:
if (OmniturePageViewHasFired() == false){
  // no omn request detected
} else {
  // found at least 1
}