【问题标题】:Access global function from a third party script从第三方脚本访问全局函数
【发布时间】:2019-02-24 11:55:20
【问题描述】:

我正在尝试安装一个声明全局函数并在某些页面中访问它的脚本。

该脚本是来自 Google 跟踪代码管理器 (GTM) 的“转化跟踪代码”。它非常简单,与许多第三方脚本(用于分析或其他)非常相似。

GTM's documentation 要求设置 3 个脚本:

1) 标题中的脚本

<!-- Global site tag (gtag.js) - Google Ads: 123456789 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-123456789">

2) 初始化脚本

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

3) 页面脚本

<!-- Event snippet for Example conversion page -->
<script>
  gtag('event', 'conversion', {'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
    'value': 1.0,
    'currency': 'USD'
  });
</script>

我的尝试

1) 标题中的脚本

这是非常有据可查且简单明了的。我已经编辑了nuxt.config.js 文件:

//nuxt.config.js

module.exports = {
  head: {
    //...
    link: [
      //...
      {
        src: "https://www.googletagmanager.com/gtag/js?id=AW-123456789",
        async: true
      }
    ]
  }
}

看起来不错,我可以在网络连接中看到请求。

2) 初始化脚本

我创建了一个简单的 Nuxt 插件:

// plugins/gtag.js

/* eslint-disable */
window.dataLayer = window.dataLayer || [];
function gtag() {
  dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "AW-123456789");

并在浏览器中加载它:

//nuxt.config.js

module.exports = {
  plugins: [
    //...
    { src: "@/plugins/gtag", ssr: false }
  ],
}

3) 页面脚本

这是我遇到麻烦的部分。

我想从某些页面访问插件中声明的gtag()函数。

所以我在方法中调用脚本:

methods: {
  open() {
    gtag('event', 'conversion', {'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
      'value': 1.0,
      'currency': 'USD'
    });
  }
}

我得到了错误:

ReferenceError: gtag 未定义

我错过了什么?

【问题讨论】:

    标签: nuxt.js


    【解决方案1】:

    您只在插件范围内定义了函数。

    您要做的是将您的函数注入到 Vue 实例和 SSR 上下文 (docs):

    // plugins/gtag.js
    
    /* eslint-disable */
    window.dataLayer = window.dataLayer || [];
    const gtag = function() {
      dataLayer.push(arguments);
    }
    gtag("js", new Date());
    gtag("config", "AW-123456789");
    
    module.exports = ({ app }, inject) => {
      inject('gtag', gtag)
    }
    

    像这样使用它(注意函数前面的强制性$ 符号):

    methods: {
      open() {
        this.$gtag('event', 'conversion', {'send_to': 'AW-123456789/AbC-D_efG-h12_34-567',
          'value': 1.0,
          'currency': 'USD'
        });
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 2018-01-31
      • 2020-06-03
      • 2021-12-31
      • 1970-01-01
      • 2013-06-30
      相关资源
      最近更新 更多