Firefox中Google Analytics JS代码出现“return语句后无法访问的代码”错误 - 这是我的问题吗?

24

我正在使用当前的 Google Analytics 跟踪代码,在 Firefox 59 中,控制台显示以下错误信息:

return语句后面的不可达代码

这是在这个JavaScript中出现的: https://www.googletagmanager.com/gtag/js?id=UA-my-tracking-code:formatted

由于这个问题似乎无法通过搜索解决,因此其他人似乎没有遇到这个问题,我猜测可能是我的问题。但是这可能是什么呢?

我将代码片段放在标记中,就像文档中所说:

<!DOCTYPE html>
<html>
    <head>
        <title>some title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">

        <!-- Global site tag (gtag.js) - Google Analytics -->
        <script async src="https://www.googletagmanager.com/gtag/js?id=UA-my-tracking-code"></script>

        <script>
          window.dataLayer = window.dataLayer || [];
          function gtag(){dataLayer.push(arguments);}
          gtag('js', new Date());
          gtag('config', 'UA-my-tracking-code');
        </script>

    </head>
    <body>
     blah blah 
    </body>
</html>

1
我遇到了同样的问题,你找到解决方法了吗? - gurtfrobe
1
火狐浏览器60.0.1也是这样。但谷歌浏览器却没有声音 :) - zalog
1
与Firefox 60.0.2相同的警告。 非常痛苦。完全同意Konrados(+1)的看法。 - PBrockmann
1
与FF 60.0b2 Dev Edition相同。看起来工作正常。我找不到关于那个主题的其他信息。 - DylanM
1
顺便提一下,那是一个<head>而不是<header>,不过你已经放在正确的元素(<head>)里了。 - brandito
显示剩余4条评论
3个回答

12

这不是你的错。如果你使用Firefox美化代码,可以在此处找到:

Gc = function (a, b, c) {
  var d = a.split('.');
  var e = function (a, b) {
    for (var c = 0; void 0 !== a && c < d.length; c++) {
      if (null === a) return !1;
      a = a[d[c]]
    }
    return void 0 !== a || 1 < c ? a : b.length ? e(Hc(b.pop()), b)  : Ic(d)
  };
  return e(Cc.eventModel, [         // <= True return value
    b,
    c
  ]);
  return Ic(d)  // <= This can never be reached!
},

美化代码:

  1. 点击警告的蓝色链接。你将看到混乱的代码。
  2. 点击该面板左下角带有{}的图标,以使其变得整洁。但是参考将会丢失。
  3. 返回“控制台”面板,再次点击相同的警告蓝色链接。现在你将在正确的行中看到原始参考。

Firefox 正确地指出了错误,函数 Ic(d) 永远不会被执行,因为该函数会提前返回。看起来像是 Google Tag Manager 的一个漏洞,但是如果没有检查原始代码,我们无法确定其严重程度。


谢谢。是的,我最终也找到了这个具体原因,尽管这并没有解决手头的问题 :) 但是,你已经进行了分析,看起来这是我们能做的最好的事情(除了可能向Google报告错误),所以我将其标记为答案。再次感谢! - konrados
我认为您只是点了我的回答的赞,但并没有将其标记为“答案”。这应该是绿色的勾号“✓”。 - Me -
这个问题有任何更新吗?我现在仍然在控制台中看到这个错误。 - JAT86
并不是真的 @JAT86... 欢迎在官方 Google 渠道上报告此错误。 - Me -

3
我的强迫症让我无法接受这样的警告。对于我的大脑来说,警告和错误一样糟糕...哈哈
@Me提供的答案让我执行了以下步骤: 1.导航到<script async src="https://www.googletagmanager.com/gtag/js?id={Google Analytics Id here}"></script>标签中的url,并复制JavaScript代码。 2.将其放入我的解决方案中的文件中,并用此新本地副本替换远程js src。 3.重新格式化文件(prettify)。 4.注释掉有问题的行(如果不能按原样到达,则只需简单删除它,不会造成太大的危害)。 这个警告已经消失了,到目前为止一切都正常 - 控制台没有额外或新的错误/警告,分析/跟踪数据仍然似乎在传递。 显然,这不是一个理想的解决方案 - 我必须继续监控这个问题,直到a)Google修复他们的代码(顺便说一下,代码中遗漏了分号 - 我怀疑它能否通过Linter)或者b)Google对代码进行其他更改,导致我的代码出错或我的分析停止报告。

1
我更害怕后者发生。 - brandito
2
@Brandito 我同意 - 但是问题文件的第一行是 // Copyright 2012 Google Inc. All rights reserved. ... 所以我不指望 Google 会修复这个问题。而且我现在正在一个 Angular SPA 上使用它,需要一些额外的代码来跟踪页面更改 - 但正如我所说,现在一切都很好地跟踪和工作。干杯! - challamzinniagroup

2
问题并非出现在所有版本的跟踪代码中。

gtag

这段使用gtag的代码片段会导致Firefox浏览器发出return语句后不可达代码警告:

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXX-YY"></script>
<script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());

    gtag('config', 'UA-XXXXXX-YY');
</script>

来源:Google Analytics中的管理部分:管理 › 跟踪信息 › 跟踪代码,上次更新时间不详。

analytics.js

使用analytics.js的此代码片段不会触发错误:

<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-XXXXXX-YY', 'auto');
ga('send', 'pageview');
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>

引自官方文档:将 analytics.js 添加到您的网站(第二个代码示例),“最后更新于 2018 年 7 月 30 日。”

请记得使用您自己的属性 ID 更新 XXXXXX-YY


有什么区别?

从管理部分:

全局站点标签 (gtag.js) 和 Google 标签管理器是新实现的推荐跟踪方法。还提供了其他实现选项,包括 analytics.js 和测量协议。了解更多关于其他跟踪方法的信息。

从文档中:

使用 analytics.js

对于新实现,gtag.js 库是推荐的跟踪代码。然而,可能存在一些情况,您希望使用 analytics.js(例如,您的网站已经使用了 analytics.js)。有关更多信息,请参阅开发人员文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接