He notado que muchas herramientas de monitoreo de terceros que necesita copiar y pegar en su sitio web siguen este patrón:
<!-- For example, Loggly --> <script type="text/javascript" src="//cloudfront.loggly.com/js/loggly.tracker-latest.min.js" async></script> <script> var _LTracker = _LTracker || []; _LTracker.push({'logglyKey': 'blah-blah-blah', 'sendConsoleErrors' : true, 'tag' : 'loggly-jslogger' }); </script> En aras de la eficiencia, loggly.tracker-latest.min.js se está cargando async , lo cual es excelente.
Mi comprensión de esta línea: var _LTracker = _LTracker || []; es que está diciendo en caso de que se llame _LTracker aún no se haya cargado desde loggly.tracker-latest.min.js , luego inicialice una matriz en blanco [] para enviar los datos.
En la situación anterior, donde los datos que contienen logglyKey están en una nueva matriz de inicio, entonces la única forma de capturar esa información es si el script externo loggly.tracker-latest.min.js , una vez que termina de cargarse, tiene algún código (no visible aquí) que luego redefine _LTracker y extrae cualquier información previamente inicializada en un Array vacío. ¿Derecha? Por ejemplo, no hay forma de que el código, tal como está visiblemente escrito, mueva la información de logglyKey del Array en blanco al _LTracker real...
Porque sí, razoné que también podría optar por modificar el código yo mismo a continuación.
<script type="text/javascript" src="//cloudfront.loggly.com/js/loggly.tracker-latest.min.js" async></script> <script> $(window).on("load",function() { var _LTracker = _LTracker; _LTracker.push({'logglyKey': 'blah-blah-blah', 'sendConsoleErrors' : true, 'tag' : 'loggly-jslogger' }); }) </script> Sin embargo, el código anterior en realidad falla con Uncaught TypeError: Cannot read properties of undefined (reading 'push') , porque _LTracker aún no estaba definido. Pero no estoy seguro de por qué porque window.on("load") debería haber esperado a que se cargara el script externo.