0
我一直在使用this code found on Github來收集一些UTM /其他URL參數。無法獲取某些Cookie的價值 - Javascript
我已經能夠成功地將參數保存在cookie中,並將這些值傳遞給隱藏的輸入表單。
此代碼通過Google跟蹤代碼管理器加載到網站的每個頁面上。
場景:
-The的Cookie會話網站的每個網頁上存在預期。
- 主網站位於不安全的HTTP連接(http://www.example.com)。
- 子域上存在一個安全頁面。 (https://www.subdomain.example.com)。
問題:在安全的子域頁面上,我無法從任何UTM cookie中獲取值。我可以從訪問者,IREFERRER,LREFERRER和ILANDINGPAGE餅乾中獲取值,但不能從UTM餅乾中獲取。
這裏是我使用的代碼:
<script type="text/javascript" charset="utf-8">
jQuery(document).ready(function(){
var _uf = _uf || {};
_uf.domain = ".exampledomain.com";
var UtmCookie;
UtmCookie = (function() {
function UtmCookie(options) {
if (options == null) {
options = {};
}
this._cookieNamePrefix = '_uc_';
this._domain = options.domain;
this._sessionLength = options.sessionLength || 1;
this._cookieExpiryDays = options.cookieExpiryDays || 365;
this._additionalParams = options.additionalParams || [];
this._utmParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
this.writeInitialReferrer();
this.writeLastReferrer();
this.writeInitialLandingPageUrl();
this.setCurrentSession();
if (this.additionalParamsPresentInUrl()) {
this.writeAdditionalParams();
}
if (this.utmPresentInUrl()) {
this.writeUtmCookieFromParams();
}
return;
}
UtmCookie.prototype.createCookie = function(name, value, days, path, domain, secure) {
var cookieDomain, cookieExpire, cookiePath, cookieSecure, date, expireDate;
expireDate = null;
if (days) {
date = new Date;
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
expireDate = date;
}
cookieExpire = expireDate != null ? '; expires=' + expireDate.toGMTString() : '';
cookiePath = path != null ? '; path=' + path : '; path=/';
cookieDomain = domain != null ? '; domain=' + domain : '';
cookieSecure = secure != null ? '; secure' : '';
document.cookie = this._cookieNamePrefix + name + '=' + escape(value) + cookieExpire + cookiePath + cookieDomain + cookieSecure;
};
UtmCookie.prototype.readCookie = function(name) {
var c, ca, i, nameEQ;
nameEQ = this._cookieNamePrefix + name + '=';
ca = document.cookie.split(';');
i = 0;
while (i < ca.length) {
c = ca[i];
while (c.charAt(0) === ' ') {
c = c.substring(1, c.length);
}
if (c.indexOf(nameEQ) === 0) {
return c.substring(nameEQ.length, c.length);
}
i++;
}
return null;
};
UtmCookie.prototype.eraseCookie = function(name) {
this.createCookie(name, '', -1, null, this._domain);
};
UtmCookie.prototype.getParameterByName = function(name) {
var regex, regexS, results;
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
regexS = '[\\?&]' + name + '=([^&#]*)';
regex = new RegExp(regexS);
results = regex.exec(window.location.search);
if (results) {
return decodeURIComponent(results[1].replace(/\+/g, ' '));
} else {
return '';
}
};
UtmCookie.prototype.additionalParamsPresentInUrl = function() {
var j, len, param, ref;
ref = this._additionalParams;
for (j = 0, len = ref.length; j < len; j++) {
param = ref[j];
if (this.getParameterByName(param)) {
return true;
}
}
return false;
};
UtmCookie.prototype.utmPresentInUrl = function() {
var j, len, param, ref;
ref = this._utmParams;
for (j = 0, len = ref.length; j < len; j++) {
param = ref[j];
if (this.getParameterByName(param)) {
return true;
}
}
return false;
};
UtmCookie.prototype.writeCookie = function(name, value) {
this.createCookie(name, value, this._cookieExpiryDays, null, this._domain);
};
UtmCookie.prototype.writeAdditionalParams = function() {
var j, len, param, ref, value;
ref = this._additionalParams;
for (j = 0, len = ref.length; j < len; j++) {
param = ref[j];
value = this.getParameterByName(param);
this.writeCookie(param, value);
}
};
UtmCookie.prototype.writeUtmCookieFromParams = function() {
var j, len, param, ref, value;
ref = this._utmParams;
for (j = 0, len = ref.length; j < len; j++) {
param = ref[j];
value = this.getParameterByName(param);
this.writeCookie(param, value);
}
};
UtmCookie.prototype.writeCookieOnce = function(name, value) {
var existingValue;
existingValue = this.readCookie(name);
if (!existingValue) {
this.writeCookie(name, value);
}
};
UtmCookie.prototype._sameDomainReferrer = function(referrer) {
var hostname;
hostname = document.location.hostname;
return referrer.indexOf(this._domain) > -1 || referrer.indexOf(hostname) > -1;
};
UtmCookie.prototype._isInvalidReferrer = function(referrer) {
return referrer === '' || referrer === void 0;
};
UtmCookie.prototype.writeInitialReferrer = function() {
var value;
value = document.referrer;
if (this._isInvalidReferrer(value)) {
value = 'direct';
}
this.writeCookieOnce('referrer', value);
};
UtmCookie.prototype.writeLastReferrer = function() {
var value;
value = document.referrer;
if (!this._sameDomainReferrer(value)) {
if (this._isInvalidReferrer(value)) {
value = 'direct';
}
this.writeCookie('last_referrer', value);
}
};
UtmCookie.prototype.writeInitialLandingPageUrl = function() {
var value;
value = this.cleanUrl();
if (value) {
this.writeCookieOnce('initial_landing_page', value);
}
};
UtmCookie.prototype.initialReferrer = function() {
return this.readCookie('referrer');
};
UtmCookie.prototype.lastReferrer = function() {
return this.readCookie('last_referrer');
};
UtmCookie.prototype.initialLandingPageUrl = function() {
return this.readCookie('initial_landing_page');
};
UtmCookie.prototype.incrementVisitCount = function() {
var cookieName, existingValue, newValue;
cookieName = 'visits';
existingValue = parseInt(this.readCookie(cookieName), 10);
newValue = 1;
if (isNaN(existingValue)) {
newValue = 1;
} else {
newValue = existingValue + 1;
}
this.writeCookie(cookieName, newValue);
};
UtmCookie.prototype.visits = function() {
return this.readCookie('visits');
};
UtmCookie.prototype.setCurrentSession = function() {
var cookieName, existingValue;
cookieName = 'current_session';
existingValue = this.readCookie(cookieName);
if (!existingValue) {
this.createCookie(cookieName, 'true', this._sessionLength/24, null, this._domain);
this.incrementVisitCount();
}
};
UtmCookie.prototype.cleanUrl = function() {
var cleanSearch;
cleanSearch = window.location.search.replace(/utm_[^&]+&?/g, '').replace(/&$/, '').replace(/^\?$/, '');
return window.location.origin + window.location.pathname + cleanSearch + window.location.hash;
};
return UtmCookie;
})();
var UtmForm, _uf;
UtmForm = (function() {
function UtmForm(options) {
if (options == null) {
options = {};
}
this._utmParamsMap = {};
this._utmParamsMap.utm_source = options.utm_source_field || 'USOURCE';
this._utmParamsMap.utm_medium = options.utm_medium_field || 'UMEDIUM';
this._utmParamsMap.utm_campaign = options.utm_campaign_field || 'UCAMPAIGN';
this._utmParamsMap.utm_content = options.utm_content_field || 'UCONTENT';
this._utmParamsMap.utm_term = options.utm_term_field || 'UTERM';
this._additionalParamsMap = options.additional_params_map || {};
this._initialReferrerField = options.initial_referrer_field || 'IREFERRER';
this._lastReferrerField = options.last_referrer_field || 'LREFERRER';
this._initialLandingPageField = options.initial_landing_page_field || 'ILANDPAGE';
this._visitsField = options.visits_field || 'VISITS';
this._addToForm = options.add_to_form || 'all';
this._formQuerySelector = options.form_query_selector || 'form';
this.utmCookie = new UtmCookie({
domain: options.domain,
sessionLength: options.sessionLength,
cookieExpiryDays: options.cookieExpiryDays,
additionalParams: Object.getOwnPropertyNames(this._additionalParamsMap)
});
if (this._addToForm !== 'none') {
this.addAllFields();
}
}
UtmForm.prototype.addAllFields = function() {
var fieldName, param, ref, ref1;
ref = this._utmParamsMap;
for (param in ref) {
fieldName = ref[param];
this.addFormElem(fieldName, this.utmCookie.readCookie(param));
}
ref1 = this._additionalParamsMap;
for (param in ref1) {
fieldName = ref1[param];
this.addFormElem(fieldName, this.utmCookie.readCookie(param));
}
this.addFormElem(this._initialReferrerField, this.utmCookie.initialReferrer());
this.addFormElem(this._lastReferrerField, this.utmCookie.lastReferrer());
this.addFormElem(this._initialLandingPageField, this.utmCookie.initialLandingPageUrl());
this.addFormElem(this._visitsField, this.utmCookie.visits());
};
UtmForm.prototype.addFormElem = function(fieldName, fieldValue) {
var allForms, firstForm, form, i, len;
if (fieldValue) {
allForms = document.querySelectorAll(this._formQuerySelector);
if (allForms.length > 0) {
if (this._addToForm === 'first') {
firstForm = allForms[0];
firstForm.insertBefore(this.getFieldEl(fieldName, fieldValue), firstForm.firstChild);
} else {
for (i = 0, len = allForms.length; i < len; i++) {
form = allForms[i];
form.insertBefore(this.getFieldEl(fieldName, fieldValue), form.firstChild);
}
}
}
}
};
UtmForm.prototype.getFieldEl = function(fieldName, fieldValue) {
var fieldEl;
fieldEl = document.createElement('input');
fieldEl.type = "hidden";
fieldEl.name = fieldName;
fieldEl.value = fieldValue;
return fieldEl;
};
return UtmForm;
})();
_uf = window._uf || {};
window.UtmForm = new UtmForm(_uf);
/*
var USOURCE = jQuery("input[name='USOURCE']").val();
var UMEDIUM = jQuery("input[name='UMEDIUM']").val();
var UCAMPAIGN = jQuery("input[name='UCAMPAIGN']").val();
var UCONTENT = jQuery("input[name='UCONTENT']").val();
var UTERM = jQuery("input[name='UTERM']").val();
var IREFERRER = jQuery("input[name='IREFERRER']").val();
var LREFERRER = jQuery("input[name='LREFERRER']").val();
var ILANDPAGE = jQuery("input[name='ILANDPAGE']").val();
var VISITS = jQuery("input[name='VISITS']").val();
console.log(USOURCE);
console.log(UMEDIUM);
console.log(UCAMPAIGN);
console.log(VISITS);
*/
jQuery('#saveProfile').on('click', function(e){
console.log('Click submitted');
e.preventDefault();
// Original JavaScript code by Chirp Internet: www.chirp.com.au
// Please acknowledge use of this code by including this header.
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i = 0; i <ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length,c.length);
}
}
return "";
}
var readCampaign = readCookie_uc_utm_campaign
var FirstName = jQuery('#ownerInformation_FirstName').val();
var LastName = jQuery('#ownerInformation_LastName').val();
var USOURCE = getCookie('_uc_utm_source');
console.log(USOURCE);
var UMEDIUM = getCookie('_uc_utm_medium') || '';
var UCAMPAIGN = getCookie('_uc_utm_campaign') || '';
var UCONTENT = getCookie('_uc_utm_content') || '';
var UTERM = getCookie('_uc_utm_term') || '';
var IREFERRER = jQuery("input[name='IREFERRER']").val();
var LREFERRER = jQuery("input[name='LREFERRER']").val();
var ILANDPAGE = jQuery("input[name='ILANDPAGE']").val();
var VISITS = jQuery("input[name='VISITS']").val();
dataLayer.push({'event':FirstName,'event_cat':LastName,'event_action':USOURCE,'event_label':VISITS});
jQuery.ajax({
url: "https://script.google.com/macros/s/googleappsscript/exec",
data: {'FirstName':FirstName,'LastName':LastName,'USOURCE':USOURCE, 'UMEDIUM':UMEDIUM, 'UCAMPAIGN':UCAMPAIGN, 'UCONTENT':UCONTENT, 'UTERM':UTERM, 'IREFERRER':IREFERRER, 'LREFERRER':LREFERRER, 'VISITS':VISITS},
type: "POST",
dataType: "json"
});
});
})
</script>
任何幫助或指導將不勝感激。
感謝,
布萊恩