【问题标题】:AngularJs inject google analytics script tagAngularJs 注入谷歌分析脚本标签
【发布时间】:2016-06-16 15:06:09
【问题描述】:

我正在尝试将我的谷歌分析脚本注入我的应用程序。我在 index.html 文件的头部有硬编码

    <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');
    </script>

这是我的指令:

app.directive('googleAnalytics', function(configFactory){
  return {
    restrict: 'E',
    replace: true,
    templateUrl: '../views/gaScript.html',
    link: function(scope,element,attrs){
      configFactory.getconfigs().then(function(configs) {
          scope.gid = configs[0].ga_id;
      });
    }
  };
})

该指令在 gaScript.html 中使用此模板来注入正确的 ga ID

<script>ga('create', '{{gid}}', 'auto');</script>

这是正文中被指令替换的 html 标记

<google-analytics></google-analytics>

问题是我认为页面正在将 &lt;script&gt;ga('create', '{{gid}}', 'auto');&lt;/script&gt; 作为字符串读取,而不是解释脚本标签

【问题讨论】:

  • '../views/gaScript.html' 中有什么内容?
  • @mparnisari 这是里面 gaScript.html &lt;script&gt;ga('create', '{{gid}}', 'auto');&lt;/script&gt;
  • 您使用的是哪个版本的 Angular?
  • Angular 版本 1.4.7

标签: javascript angularjs google-analytics


【解决方案1】:

基于@mparnisari cmets,我能够让它正常工作。这是最终结果,以防万一这对其他人有所帮助。

这是在 index.html 页面的头部硬编码的

    <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');
    </script>

这是指令:

app.directive('googleAnalytics', function(configFactory){
  return {
    restrict: 'E',
    replace: true,
    link: function(scope,element,attrs){
      configFactory.getconfigs().then(function(configs) {
          scope.gid = configs[0].ga_id;
          var scriptTag = angular.element(document.createElement("script"));
              scriptTag.text("ga('create', '"+scope.gid+"', 'auto');")
              element.append(scriptTag);
      });
    }
  };
})

这是指令使用的 index.html 正文中的 html 标记

<google-analytics></google-analytics>

我的系统有多个用户。此代码允许每个用户使用自己的 GA id

【讨论】:

  • 我没有使用谷歌分析,所以我可能会大错特错,但是当你可以直接调用JS时为什么要注入脚本,即将你的链接函数更改为link: function(scope) { ga('create', scope.gid, 'auto'); }
  • @NikosParaskevopoulos 我无法直接调用 js,因为该页面不会将脚本读取为脚本标签,而是将其解释为字符串
  • 不,我的意思是直接从指令中调用 Google 的 ga() 函数,而不是生成将成为调用 ga() 的脚本的字符串。
  • 我不知道我可以直接调用 ga()。让我试试
  • @NikosParaskevopoulos 不确定我是不是做错了,但这没有用
猜你喜欢
  • 1970-01-01
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多