gpt4 book ai didi

javascript - Google Analytics 或 Intercom 等片段使用哪种设计模式?

转载 作者:行者123 更新时间:2023-12-01 00:59:50 25 4
gpt4 key购买 nike

我想为 Google Analytics 和 Intercom 创建一个类似的代码片段:

对讲示例 https://developers.intercom.com/installing-intercom/docs/basic-javascript

//Set your APP_ID
var APP_ID = "APP_ID";

window.intercomSettings = {
app_id: APP_ID
};
(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',w.intercomSettings);}else{var d=document;var i=function(){i.c(arguments);};i.q=[];i.c=function(args){i.q.push(args);};w.Intercom=i;var l=function(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/' + APP_ID;var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);};if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})();

Google Analytics:


Adding analytics.js to Your Site
The analytics.js library is a JavaScript library for measuring how users interact with your website. This document explains how to add analytics.js to your site.

The JavaScript measurement snippet
Adding the following code (known as the "JavaScript measurement snippet") to your site's templates is the easiest way to get started using analytics.js.

The code should be added near the top of the <head> tag and before any other script or CSS tags, and the string 'GA_MEASUREMENT_ID' should be replaced with the property ID (also called the "measurement ID") of the Google Analytics property you wish to work with.

Tip: If you do not know your property ID, you can use the Account Explorer to find it.
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-XXXXX-Y', 'auto');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->

Intercom 和 Google 使用哪些设计模式来创建此代码片段?他们内部工作如何?您能给我一个基本结构,以便我可以用我想要的功能填充它吗?

最佳答案

Google Analytics(adn Intercom)的 IIFE 基本上是他们编写适用于所有浏览器的脚本加载器的最短方法。

如果我们完整地写出速记,结构就会变得更容易阅读:

window.GoogleAnalyticsObject = 'ga';
window.ga = window.ga || function() {
window.ga.q = window.ga.q || [];
window.ga.q.push( arguments );
},
window.ga.l = 1 * new Date();
var a = document.createElement( 'script' );
var m = document.getElementsByTagName( 'script' );
a.async = true;
a.src = 'https://www.google-analytics.com/analytics.js';
m.parenNode.insertBefore( a, m );

window.ga('create', 'UA-XXXXX-Y', 'auto');
window.ga('send', 'pageview');

Intercom 示例基本上执行相同的操作。

因此该脚本首先保证窗口对象上存在正确的名称。如果 google Analytics 对象已经存在,它将被使用,否则它将成为将数据保存在数组中的函数。这可以防止多次添加脚本,因此如果另一个插件也尝试加载相同的脚本,它们将共享其 GA 实例。

然后该脚本创建一个新的脚本标记并将其配置为实际 google 分析脚本的 url。一旦新创建的脚本标签添加到页面,它将加载实际的 analytics.js脚本。

虽然我还没有看过analytics.js的细节,但我很确定它会解压或合并我们创建的 window.ga 对象,并将其替换为实际的分析脚本。

总而言之,这是一种奇特的书写方式 <script src="https://www.google-analytics.com/analytics.js">这将适用于旧浏览器,并且将确保如果在单个页面上加载多个脚本实例,我们不会有多个脚本实例相互冲突。

analytics.js 脚本和对讲小部件脚本的实际内部工作原理不包含在这些加载器脚本中,因此我不会详细介绍它们的工作原理,这应该是一个不同的问题,显示以下行实际的analytics.js脚本的代码。

编辑:

window.ga = window.ga || function() {

这一行确保 window.ga是一个函数。为了简单起见,我们假设这是一个页面 ga尚不存在。

所以当我们调用ga('create', 'UA-XXXXX-Y', 'auto');时和ga('send', 'pageview');我们运行以下语句:

    window.ga.q = window.ga.q || [];
window.ga.q.push( arguments );

window.ga.q = window.ga.q || [];确保 window.ga.q 是一个数组。然后window.ga.q.push( arguments );将参数插入其中。

打电话ga('create', 'UA-XXXXX-Y', 'auto');ga('send', 'pageview');在加载分析脚本之前,会产生以下结果:

window.ga.q = [
[ 'create', 'UA-XXXXX-Y', 'auto' ],
[ 'send', 'pageview' ]
];

记住,window.ga是一个函数,但函数也是 JavaScript 中的一种对象。所以我们可以添加属性q函数与 window.ga 相同是一个对象,该函数仍然有效。

加载分析脚本后,它将查看 window.ga.q数组并运行所有这些命令。

问题是,查看analytics.js 脚本。它也是以相同的风格编写的,因此需要几个小时才能重写它并替换所有简写,因此我会尝试寻找该脚本的带注释的非缩小源(如果它在某处可用)。

关于javascript - Google Analytics 或 Intercom 等片段使用哪种设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56186677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com