首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TrackJS、GDPR和SPA

TrackJS、GDPR和SPA
EN

Stack Overflow用户
提问于 2019-10-08 06:00:54
回答 2查看 233关注 0票数 2

我在SPA中使用TrackJS,我有与GDPR相关的逻辑,所以在同意之前我不能发送任何数据。

我找到了onError配置选项,它有助于解决这个问题。但是我仍然有对https://usage.trackjs.com/usage.gif的外部要求。我可以通过一些技巧来禁用它,但它看起来不正确。

那么,如何防止使用调用呢?

实施实例:

代码语言:javascript
复制
import { TrackJS } from 'trackjs';

let GLOBAL_VARIABLE_IS_CONSENT_GIVEN = false;

TrackJS.install({
  usageURL: '#', // disable usage call
  onError: function() {
    if (!GLOBAL_VARIABLE_IS_CONSENT_GIVEN) {
      return false;
    }

    // other logic

    return true;
  },
});

我还发现SPA中的使用调用存在问题。它将不会显示实际的页面查看结果。因此,支持手动调用使用请求是很好的,它将解决上述两个问题。发现它是已知的限制:https://docs.trackjs.com/data-management/pageviews/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-11 08:02:46

目前我只找到了一个解决问题的方法。我编写了helper类,它应用猴子补丁来防止发送使用调用和错误跟踪,直到它允许。当您需要阻止加载外部脚本时,通常会使用猴子补丁,例如我们已经使用的iubenda。

帮助者班:

代码语言:javascript
复制
class TrackJSUtil {
  static URL_PATTERN = /usage\.trackjs\.com/;

  /**
   * Keep usage url
   *
   * @private
   * @type {null|string}
   */
  usageUrl = null;

  /**
   * Is requests allowed
   *
   * @private
   * @type {boolean}
   */
  isRequestsAllowed = false;

  /**
   * Apply monkey patch
   */
  install() {
    if (this.isRequestsAllowed) {
      return;
    }

    const setUsageUrl = (value) => {
      this.usageUrl = value;
    };

    const ignore = () => this.isRequestsAllowed || this.usageUrl != null;

    const createElementOriginal = document.createElement.bind(document);

    document.createElement = function createElementForTrackJS(...args) {
      const element = createElementOriginal(...args);

      if (ignore() || element.tagName.toUpperCase() !== 'IMG') {
        return element;
      }

      Object.defineProperty(element, 'src', {
        get() {
          return this.getAttribute('src');
        },
        set(value) {
          if (TrackJSUtil.URL_PATTERN.test(value)) {
            setUsageUrl(value);
          } else {
            this.setAttribute('src', value);
          }
        },
      });

      return element;
    };
  }

  /**
   * Callback for onError in TrackJS
   * @return {boolean}
   */
  onTrackJSError() {
    return this.isRequestsAllowed;
  }

  /**
   * Call it when requests are allowed
   */
  allow() {
    if (this.isRequestsAllowed) {
      return;
    }

    this.isRequestsAllowed = true;

    if (this.usageUrl == null) {
      return;
    }

    document.createElement('img').src = this.usageUrl;
  }
}

用法:

代码语言:javascript
复制
import { TrackJS } from 'trackjs';

const util = new TrackJSUtil();

if (IS_CONSENT_GIVEN) {
  util.allow()
} else {
  callItWhenConsentGiven(() => {
    util.allow();
  });
}

util.install();

TrackJS.install({
  onError: () => util.onTrackJSError(),
});
票数 1
EN

Stack Overflow用户

发布于 2019-10-08 20:21:20

这里是TrackJS前端错误监测的托德。我不认为你需要短路调用使用的GDPR,因为它不包含任何特定用户的数据。它只是一个给定应用程序加载多少次的计数器。

使用只发送:

  • 帐户令牌
  • 申请我
  • 生成的唯一性标识符

所有这些都不能追溯到用户,因此您应该能够继续并允许发生使用调用,并使用您所描述的方法来阻止在onError中发送错误。

或者,我建议您将呼叫TrackJS.install的时间推迟到获得同意之后。这种方法的缺点是,在同意之前发生的错误没有被捕获。但我想这就是用户想要的?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58280897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档