gpt4 book ai didi

javascript - 使用 RequireJS 通过 GTM 自定义 HTML 标签注入(inject) jQuery 片段

转载 作者:行者123 更新时间:2023-11-28 05:51:39 25 4
gpt4 key购买 nike

背景:

我们有几个项目,分析团队通过添加 JS (或者更确切地说 jQuery)将 mixpanel.track() 调用连接到元素上的点击)GTM 自定义 HTML 标记中的片段。例如:

$(".btn.business").click(function() {
mixpanel.track("Segmentation - Business");
});

可能不是最明显的方法,但这使他们能够独立管理跟踪,而不需要更改应用程序的 JS 或标记。

问题:

在一个新项目中,我们想使用 RequireJS 进行模块加载,它工作得很好,只是分析的代码片段往往在 jQuery 加载之前执行,这当然会导致类似的错误

ReferenceError: $ is not defined

问题:

如果我们决定保留整个通过 gtm 注入(inject) JS 的方法,如何重写代码片段以便它们“等待”jQuery 加载?或者,GTM 中是否存在任何其他“全局”干扰点可以解决该问题?我不认为分析适合普通 JS。

其他信息:

整体页面布局:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta charset="utf-8">
<script type="text/javascript">
//NewRelic script - just to be honest
</script>
<title><!-- TITLE --></title>
<!-- A bunch of links: favicon, css, fonts -->
<script type="text/javascript">
//MixPanel script, generic
</script>

</head>
<body>
<!--
All page markup
goes
here
-->
<script src="/member/res/common/scripts/libs/require.min.js?v=601722621"></script>
<script src="/member/content/js/config.js?v=601722621"></script>
<script>
require.config({
urlArgs: 'v=601722621'
});
</script>

<script>
require(['Shared/Header', 'Report/report', 'Shared/sharingModal']);
</script>
<script>
var dataLayer = [
//the default dataLayer fillings
];
</script>

<noscript>
<!-- GTM iframe -->
</noscript>
<script>
//GTM script, generic
</script>
</body>
</html>

(部分)config.js:

require.config({

baseUrl: '/member/Content/js/',
// wait befor give up load js module (by default 7s)
waitSeconds: 30,

paths: {
// jQuery and validation, other vendors
jquery: ['https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min', './../../res/Common/Scripts/libs/jquery-2.1.4.min'],
jqueryValidate: ['https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min', './../../res/Common/Scripts/libs/jquery.validate.min'],

//etc...

clipboard: './../../res/TM/Scripts/modules/clipboard.min', // copy text to clipboard
}
});

// Load global js
require(['app', 'jquery', 'spinner'], function(app) {
app.init();
});

最佳答案

您应该能够在大部分情况下保持按原样编写代码,而依靠触发器类型。

为您的代码配置一个使用非默认触发器类型之一的触发器:

  • 页面浏览量(默认)
  • DOM Ready(可能满足您的需求)
  • 窗口已加载(默认 GTM 中可能发生最后一个事件 - 在大多数情况下此时所有内容均已加载)。

enter image description here

关于javascript - 使用 RequireJS 通过 GTM 自定义 HTML 标签注入(inject) jQuery 片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38023769/

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