Google Analytics JS hiba nem webszerveren futtatás esetén

Az alábbi problémával találkoztam a minap: egyszerű, lokális futtatáskor, ha adott egy Google Analytics (egészen pontosan Universal Analytics) JS snippet-et is tartalmazó HTML oldal (mondjuk egy egyszerű „index.html”), akkor azt közvetlenül böngészőben megnyitva (file:///C:/<elérés>/index.html az address box-ban) a Google Analytics hívás előbb-utóbb timeout-tal elszáll Google Chrome böngészőben (v36), és a végeredmény:

Failed to load resource: net::ERR_FILE_NOT_FOUND file://www.google-analytics.com/analytics.js

Az Internet Explorer 11-ben is hasonló a helyzet, csak még tovább „próbálkozik” (érdekes, hogy Firefox v30 esetében viszont kevésbé érzékelhető mindez).

A probléma lényegében minden böngésző esetében ugyanarra az okra vezethető vissza (és nem is Analytics JS snippet specifikus a jelenség): ha „file://” protokollal történik a HTML oldal megnyitása, akkor a böngészők lokális helyről („file://” protokollal) próbálják betölteni a kért erőforrást, és nem is adják fel a próbálkozást egykönnyen… (a „file://” hivatkozás igen árulkodó a fenti hibajelzésben is).

Egyébként a „//” kezdetű URL hivatkozás teljesen helyes (protocol relative URL), az RFC3986 tartalmazza.

(from: http://www.ietf.org/rfc/rfc3986.txt)

Természetesen szerveren futtatva nincs is probléma, de ha mégis szükséges a lokális működés (akár csak tesztelési céllal), akkor gyors megoldásként kicsit módosítsunk a JS snippet-en:

A ‘//www.google-analytics.com/analytics.js’ string-et írjuk át ‘http://www.google-analytics.com/analytics.js’ értékre. Vagy http és https vegyes használat esetén: cseréljük ki az alábbiakra: (‘https:’ == document.location.protocol ? ‘https://’ : ‘http://’) +’www.google-analytics.com/analytics.js’

Azt nem ellenőriztem, hogy ilyenkor az események megjelennek-e Analytics-ben, de vélhetően a következetes működés/hit-ek regisztrálása nem működik, mert pl. nincs domain amihez a cookie-k beállíthatóak lennének… Ez utóbbi eset még localhost-on történő tesztelésnél is gond, de erre legalább van hivatalos megoldás:

Testing on localhost

In some cases you might want to test analytics.js from a webserver running on localhost. To set analytics.js cookies, you need to disable the default cookie domain using: ga(‘create’, ‘UA-XXXX-Y’, { ‘cookieDomain’: ‘none’ });

(from: https://developers.google.com/analytics/devguides/collection/analyticsjs/advanced)

Vélemény, hozzászólás?

FIGYELEM! Ez a bejegyzés több mint egy éves, így a benne szereplő információk is ennek megfelelően kezelendőek! Az esetleges frissítések minden esetben külön megjelöltek.