2015-03-26 7 views
4

Мне нужно использовать локальную analytics.js, которую я обслуживаю с моего сервера. Я просто хочу использовать локальную версию, если это необходимо - так есть ли решение для проверки, не вызвал ли вызов для analytics.js?Проверьте, загружен ли analytics.js

Я думал о проверке его с помощью глобального window.onerror, но я не думаю, что неудачный вызов внешнего файла вызывает ошибку. Я попытался проверить, доступен ли ga(), но даже если analytics.js не загружен.

Любые идеи? Если вам интересно, не у всех пользователей этого сайта есть доступ в Интернет, поэтому я обслуживаю локальную версию. В этом случае происходит больше вещей, например, добавление sendHitTask для перенаправления ответа от analytics.js на локальный сервер.

EDIT Решение, в котором вы проверяете, имеет ли пользователь доступ в Интернет, также будет в порядке. Но я не нашел никакого решения для этого, которое работает во всех современных браузерах.

+0

Что делает console.log (window.ga) печатать, когда analytics.js не загружается? –

+0

Вероятно, неопределенный, как yahoo.com – Huangism

+0

@Huangism это то, что я тоже думаю, но OP утверждает, что он существует, даже если analytics.js не загружен. Вы определяете ga где-то еще в своем проекте? –

ответ

7

Существует функция отслеживания загрузки библиотеки. Из документов https://developers.google.com/analytics/devguides/collection/analyticsjs/command-queue-reference#ready-callback:

ga(function(tracker) { 
    var defaultPage = tracker.get('page'); 
}); 

Переданные в функции выполняются, когда библиотека загружена, так что вы можете установить переменную для отслеживания или не загружен он. Вы должны были бы поставить его на какой-то таймер, чтобы решить, когда вы хотите, чтобы рассмотреть его не удалось:

var loaded = false; 
ga(function() { 
    loaded = true; 
}); 

// after one second do something if the library hasn't loaded 
setTimeout(function(){ 
    if (!loaded){ 
     //do something 
    } 
},1000); 
+0

Удивительный! Я попробую это завтра и дам вам знать, если это сработает! –

+0

Отлично работает! Сначала я использую обычный фрагмент кода, запускаю ga ('create') и требуя функции отображения и электронной торговли. Я запустил эту функцию, чтобы установить gaIsLoaded в true (а также установить sendHitTask), затем я запустил ga ('send'). Все это поставлено в очередь, если я правильно это понимаю ... и когда мой обычный фрагмент завершится неудачей, он загрузит локальный через секунду и запустит все предыдущие команды. –

0

Особенно элегантное решение было бы использовать RequireJS и использовать поддержку fallback paths. Я делаю это на моем сайте, чтобы загрузить версию окурок analytics.js если загрузка GA терпит неудачу, потому что посетитель использует инструмент конфиденциальности, блокирующий запрос:

http://veithen.github.io/2015/02/14/requirejs-google-analytics.html

Ваш случай использования аналогично, за исключением того, что вы хотите Откат к полная локальная копия. Вероятно, вы также не хотите изменять все вызовы в GA, как описано в этой статье. Если это так, тогда вы можете использовать гибридный подход, в котором вы должны использовать RequireJS для загрузки analytics.js (версия Google или локальная копия) без изменения какого-либо другого кода.

установка этой будет включать в себя следующие шаги:

  • Добавить RequireJS на ваш сайт и настроить его следующим образом:

    require.config({ 
        paths: { 
         "ga": [ 
          "//www.google-analytics.com/analytics", 
          "local-copy-of-analytics" 
         ] 
        } 
    }); 
    
  • Используйте alternative version of the tracking code, но заменить <script async src='//www.google-analytics.com/analytics.js'></script> со следующим JavaScript код:

    require(["ga"]); 
    
Смежные вопросы