From fc07701079ec03afcb96a68ae8b7733cebeeb09d Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Fri, 6 Mar 2020 14:32:49 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20D=C3=A9sactive=20le=20suivi=20de?= =?UTF-8?q?s=20actions=20sur=20Safari=20mobile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Uniquement pour les intégration iFrame. Relatif à #893. Revert de 6d185e et 65a905 --- index.html | 18 +++++++++++++++++- source/Tracker.ts | 20 ++++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 78f84421b..612f2fc07 100644 --- a/index.html +++ b/index.html @@ -257,6 +257,22 @@ <% if (htmlWebpackPlugin.options.injectTrackingScript) { %> <% for (var chunk in htmlWebpackPlugin.files.chunks) { %> - + <% } %> diff --git a/source/Tracker.ts b/source/Tracker.ts index 830ee274b..3e80fc4a7 100644 --- a/source/Tracker.ts +++ b/source/Tracker.ts @@ -1,5 +1,5 @@ import { History, Location } from 'history' -import { debounce } from './utils' +import { debounce, inIframe } from './utils' declare global { interface Window { @@ -10,12 +10,28 @@ declare global { type PushArgs = ['trackPageView'] | ['trackEvent', ...Array] type PushType = (args: PushArgs) => void +const ua = window.navigator.userAgent +const iOSSafari = + (!!ua.match(/iPad/i) || !!ua.match(/iPhone/i)) && + !!ua.match(/WebKit/i) && + !ua.match(/CriOS/i) + export default class Tracker { push: PushType unlistenFromHistory: (() => void) | undefined previousPath: string | undefined - constructor(pushFunction: PushType = args => window._paq.push(args)) { + constructor( + pushFunction: PushType = args => { + // There is an issue with the way Safari handle cookies in iframe, cf. + // https://gist.github.com/iansltx/18caf551baaa60b79206. We could probably + // do better but for now we don't track action of iOs Safari user in + // iFrame -- to avoid errors in the number of visitors in our stats. + if (!(iOSSafari && inIframe)) { + window._paq.push(args) + } + } + ) { if (typeof window !== 'undefined') window._paq = window._paq || [] this.push = debounce(200, pushFunction) as PushType }