SiteCatalyst : Tracking Custom links on Webkit bro

2019-06-28 06:09发布

问题:

My query is that I have a link that redirects to another page. In webkit browsers, how to force the sitecatalyst server call (script execution) to finish before the redirect happens?

I am using sitecatalyst for a portal. I have configured the custom link call to include the doneAction parameter for successful call completion on webkit browsers (As mentioned in Adobe guide).

The custom link code for onClick event of button is as below:

<script language="javascript" >
function search(keyword)
{
var s=s_gi('testing');
s.linkTrackVars="prop11,events";
s.linkTrackEvents="event6";
s.prop11=keyword;
s.events="event6";
s.tl(this,'o','Search',navigate());

window.location=searchresults.html;
}
</script>

<script language="javascript" >
function navigate()
{
return false;

/*To induce a delay to ensure that image request is sent to Adobe before the
user leaves the page.(As given in Adobe guide - code release H.25))
Code version H.25 (released July 2012) includes an overloaded
track link method ( s.tl ) that forces WebKit
browsers to wait for the track link call to complete.)*/
}
</script>

However, even after this, I am getting error in custom link tracking. The redirect happens before the call can complete.

Please help on the same. Thanks in Advance.

Regards, Harshil

回答1:

Okay so firstly there are a number of issues with how you implemented it. Here is an example of how it should look like:

<a href="searchresults.html" onclick="search('someKeyword');return false;">search</a> 

<script type='text/javascript'>
function search(keyword) {
  var s=s_gi('testing');
  s.linkTrackVars="prop11,events";
  s.linkTrackEvents="event6";
  s.prop11=keyword;
  s.events="event6";
  s.tl(this,'o','Search',null,navigate);
  return false;
}

function navigate(){
  window.location="searchresults.html";
}
</script>

Some points

  • You didn't actually post the link or whatever you are using that calls the search function so I have a link shown as an example.
  • You passed the navigate function as the 4th argument when it should be the 5th (with a null or blank string as a placeholder for the 4th)
  • It should be navigate not navigate(). The way you did it, you are making a call to the function and passing the result of the function as an argument. s.tl requires the actual function or reference to a function, and it will make the call to the function. In fairness, the Adobe document is typoed: it shows the example wrapped in quotes which doesn't work.
  • The redirect should be placed in navigate, not in search.


回答2:

Replace the link href with javascript function

function trackLink(e) {
    nextUrl = e.href;
    e.href = "javascript:sendData('" + nextUrl + "')";
}

function sendData(url) {
    s.tl(this, "o", "Link Name", null, function() {
        window.location.href = url;
    });
}

or try out the following

function sendData(obj) {
    s.tl(obj, "o", "Link Name", null, "navigate");
    return false;
}
<a href="new.html" onclick="sendData(this);return false;">Link</a>


回答3:

Link tracking is a dinosaur form of tracking as the numbers are barely accurate these days if you are not putting analytics before user experience. What I don't understand is that why don't you measure this on the next page instead of the link, unless you have no control over the next step?

As for your question: Previous examples on how to prevent link following before event is executed are quite solid, but remember if you have other JS code binded, be sure not to break it. As for the syntax, you can pass all variables to s.tl function as an object without setting linkTrackVars and linkTrackEvents for the s-object, which might have negative effects on events if case you use the code on dynamic pages.

E.g.

...  
var data = {
   linkTrackVars="prop11,events",
   linkTrackEvents="event6",
   prop11=keyword,
   events="event6"
};
s.tl(this, "o", "Search", data, "navigate");
...

Note: You can't actually use props and events together in standard reporting. As per the code you pasted in comments to Crayon I can see that you are using eVars, so I assume that the example was not that accurate.