无法获取某些 Javascript 的值

Cannot get value of certain Javascript

本文关键字:Javascript 的值 获取      更新时间:2023-09-26

我一直在使用Github上的这段代码来收集一些UTM/其他URL参数。

我已经能够成功地将参数保存在 cookie 中,并将这些值传递到隐藏的输入表单中。

此代码通过谷歌跟踪代码管理器加载到网站的每个页面上。

场景:

- Cookie 会话按预期存在于网站的每个页面上。

-主网站位于不安全的HTTP连接上(http://www.example.com)。

-子域上存在安全页面。(https://www.subdomain.example.com)。

问题:在安全的子域页面上,我无法从任何UTM Cookie中获取值。我可以从 VISITERS、IREFERRER、LREFERRER 和 ILANDINGPAGE cookie 中获取值,但不能从 UTM cookie 中获取值。

这是我正在使用的代码:

<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>

任何帮助或指导将不胜感激。

谢谢

布莱恩

Cookie 受到此类域限制的原因是为了防止安全漏洞。

请参阅此答案以了解解决方法:跨域 Cookie