如果通过GTM插入代码,如何使用断点调试JS代码
How to debug JS code with breakpoints if the code is inserted via GTM
在 GTM 中我添加了一个自定义 html:
<!--Start of Tawk.to Script-->
<script type="text/javascript">
var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
///////////////
// Chat started
function notifyFacebookAboutAboutChatStarted(content_category){
fbq('track', 'Contact', {how: "chat_started", content_category: content_category}); // Breakpoint
}
function notifyAllSystemsAboutChatStarted(content_category){
notifyFacebookAboutAboutChatStarted(content_category);
}
//////////////
// Chat form submit
function notifyFacebookAboutChatFormSubmit($element, content_category){
fbq('track', 'Lead', {content_category: content_category});
}
function notifyAllSystemsAboutChatFormSubmit(content_category){
notifyFacebookAboutChatFormSubmit($element=$element, content_category=content_category);
}
// Event listeners
Tawk_API.onChatStarted = function(data){notifyAllSystemsAboutChatStarted(content_category=content_category);};
Tawk_API.onOfflineSubmit = function(data){notifyAllSystemsAboutChatFormSubmit(content_category=content_category);};
(function(){
var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
s1.async=true;
s1.src='https://embed.tawk.to/6131ae1fd6e7610a49b36846/1fel10b81';
s1.charset='UTF-8';
s1.setAttribute('crossorigin','*');
s0.parentNode.insertBefore(s1,s0);
})();
</script>
<!--End of Tawk.to Script-->
拜托,不要太关注这段代码,因为问题不是关于它的。这只是一段代码,显示我通常放入 GTM 容器中的内容而不是被分析。
我想在 Chrome 中调试这个 JavaScript。 换句话说,我希望能够在断点处停止(在代码中标记为 // Breakpoint)。
我的意思是在 Chrome DevTools 面板中。像这样:
但这是一些没有使用 GTM 插入的代码。我打开 Sources 选项卡并尝试通过 GTM 找到我的 JavaScript addeb。
Tawk 是我通过 GTM 添加的在线聊天。它肯定在那里,因为 Tawk 的图标已经出现在网站上。
所以,我想通过在断点处停止来调试我的 JavaScript 代码。但是我找不到放置这些断点的位置。是否可能?或者我应该先在 GTM 外部调试代码,然后再将其插入 GTM 内部?但这很笨拙:如果用户报告错误,我想先分析问题而不做任何更改。
那么问题来了:如果代码是通过GTM插入的,如何断点调试JS代码?
如果您将其放入自定义 HTML 标记中,它将作为字符串插入,并在 运行 时通过 eval 插入 运行,所以我怀疑调试器是否会注意到这是JavaScript.
基本上你的选择是
- 把它放在一个外部文件中,这违背了 GTM 的目的
- 将代码重写为自定义模板(这需要付出很多努力,但这意味着至少您可以在 GTM 中编写测试以确保您的代码 运行s。但是自定义模板代码会被转译,因此可能很难在调试器中识别)
我认为你最好的选择实际上是首先在 GTM 之外进行测试(我承认这不是真正的测试,因为这意味着你不会测试最终会 运行 的配置)。
在 GTM 中我添加了一个自定义 html:
<!--Start of Tawk.to Script-->
<script type="text/javascript">
var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
///////////////
// Chat started
function notifyFacebookAboutAboutChatStarted(content_category){
fbq('track', 'Contact', {how: "chat_started", content_category: content_category}); // Breakpoint
}
function notifyAllSystemsAboutChatStarted(content_category){
notifyFacebookAboutAboutChatStarted(content_category);
}
//////////////
// Chat form submit
function notifyFacebookAboutChatFormSubmit($element, content_category){
fbq('track', 'Lead', {content_category: content_category});
}
function notifyAllSystemsAboutChatFormSubmit(content_category){
notifyFacebookAboutChatFormSubmit($element=$element, content_category=content_category);
}
// Event listeners
Tawk_API.onChatStarted = function(data){notifyAllSystemsAboutChatStarted(content_category=content_category);};
Tawk_API.onOfflineSubmit = function(data){notifyAllSystemsAboutChatFormSubmit(content_category=content_category);};
(function(){
var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
s1.async=true;
s1.src='https://embed.tawk.to/6131ae1fd6e7610a49b36846/1fel10b81';
s1.charset='UTF-8';
s1.setAttribute('crossorigin','*');
s0.parentNode.insertBefore(s1,s0);
})();
</script>
<!--End of Tawk.to Script-->
拜托,不要太关注这段代码,因为问题不是关于它的。这只是一段代码,显示我通常放入 GTM 容器中的内容而不是被分析。
我想在 Chrome 中调试这个 JavaScript。 换句话说,我希望能够在断点处停止(在代码中标记为 // Breakpoint)。
我的意思是在 Chrome DevTools 面板中。像这样:
但这是一些没有使用 GTM 插入的代码。我打开 Sources 选项卡并尝试通过 GTM 找到我的 JavaScript addeb。
Tawk 是我通过 GTM 添加的在线聊天。它肯定在那里,因为 Tawk 的图标已经出现在网站上。
所以,我想通过在断点处停止来调试我的 JavaScript 代码。但是我找不到放置这些断点的位置。是否可能?或者我应该先在 GTM 外部调试代码,然后再将其插入 GTM 内部?但这很笨拙:如果用户报告错误,我想先分析问题而不做任何更改。
那么问题来了:如果代码是通过GTM插入的,如何断点调试JS代码?
如果您将其放入自定义 HTML 标记中,它将作为字符串插入,并在 运行 时通过 eval 插入 运行,所以我怀疑调试器是否会注意到这是JavaScript.
基本上你的选择是
- 把它放在一个外部文件中,这违背了 GTM 的目的
- 将代码重写为自定义模板(这需要付出很多努力,但这意味着至少您可以在 GTM 中编写测试以确保您的代码 运行s。但是自定义模板代码会被转译,因此可能很难在调试器中识别)
我认为你最好的选择实际上是首先在 GTM 之外进行测试(我承认这不是真正的测试,因为这意味着你不会测试最终会 运行 的配置)。