javascript - Yii2 按顺序注册 JS 文件和内联 JS 的组合

标签 javascript google-analytics yii2

我正在尝试从 Google Analytics docs 中注册以下内容:

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

所以我在我的小部件中做了以下操作:

$this->view->registerJs('
    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
    ga(\'create\', \'UA-XXXXX-Y\', \'auto\');
    ga(\'send\', \'pageview\');
', View::POS_HEAD);

$this->view->registerJsFile(
    'https://www.google-analytics.com/analytics.js',
    [
       'async'=>'async',
       'position' => View::POS_HEAD,
    ]
);

但是注册的 JS 文件先于 Inline JS 出现。有没有办法让脚本遵守顺序?

我考虑过使用 AssetBundle 和“依赖”协议(protocol),但 Yii2 文档中没有关于 AssetBundle 中的内联 JS 的内容。

你可以给内联 JS 一个键,但遗憾的是“依赖”协议(protocol)需要一个类名。

最佳答案

您可以将第一个代码块移动到一个 js 文件中,并在 Assets 包中使用它。然后对于第二个 js url 使用该 Assets 作为依赖

google_analytics.js

window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
 ga('create', 'UA-XXXXX-Y', 'auto');
 ga('send', 'pageview');

GoogleAnalyticsAsset.php

<?php

namespace app\assets;

use yii\web\AssetBundle;

class GoogleAnalyticsAsset extends AssetBundle
{
   public $basePath = '@webroot/web';
   public $baseUrl = '@web/web';

   public $jsOptions = ['position' => \yii\web\View::POS_HEAD];
   public $css = [
   ];
   public $js = [
       'js/google_analytics.js',
   ];
   public $depends = [
   ];
}

在你的小部件里面

use app\assets\GoogleAnalyticsAsset;
public function init() {
    GoogleAnalyticsAsset::register( $this->getView() );
    parent::init();
}

public function run()
{
   $this->registerJsFile('https://www.google.com/jsapi',['position' => \yii\web\View::POS_HEAD,'depends' => 'app\assets\GoogleAnalyticsAsset']);
}

关于javascript - Yii2 按顺序注册 JS 文件和内联 JS 的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47291051/

相关文章:

JavaScript:混合数组/对象的奇怪(边缘?)情况

google-analytics - Universal Analytics 子域跟踪

php - 根据场景设置默认模型值

php - Yii2 301 从原始 url 重定向到 .htaccess 中的 SEO 友好 url 不起作用,需要其他解决方案

yii2 基本打印 pdf 页面

php - 可以使用在同一页面上的表单中选择的值来填充 php/mysql 调用吗?

javascript - 如何在 javascript 中对值进行四舍五入?

javascript - 使用jquery将每行1列的表变成每行2列的表

google-analytics - 带有子域和聚合数据的 Google Analytics

javascript - 使用 Java,如何验证/验证 Google Analytics 异步跟踪代码(分析片段)位于网页源的 <head> 标记部分下