Skip to content

Commit 5deaa46

Browse files
committed
fix(service): Fix injecting script to document head #4
1 parent 6be685c commit 5deaa46

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

projects/ngx-metrika/src/lib/ngx-metrika.service.ts

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
import {EventEmitter, Inject, Injectable, Renderer2, RendererFactory2} from '@angular/core';
22
import {NavigationEnd, Router} from '@angular/router';
3-
import {
4-
CommonOptions,
5-
MetrikaGoalEventOptions,
6-
MetrikaHitEventOptions,
7-
MetrikaHitOptions,
8-
NgxMetrikaConfig
9-
} from './interfaces';
3+
import {CommonOptions, MetrikaGoalEventOptions, MetrikaHitEventOptions, MetrikaHitOptions, NgxMetrikaConfig} from './interfaces';
104
import {filter, tap} from 'rxjs/operators';
115
import {YM_CONFIG} from './ym.token';
126
import {BehaviorSubject} from 'rxjs/internal/BehaviorSubject';
7+
import {DOCUMENT} from '@angular/common';
138

149
declare var Ya: any;
1510

@@ -30,9 +25,12 @@ export class NgxMetrikaService {
3025
public hit = new EventEmitter<MetrikaHitEventOptions>();
3126
public reachGoal = new BehaviorSubject<MetrikaGoalEventOptions>({target: 'test'});
3227

33-
constructor(@Inject(YM_CONFIG) ymConfig: NgxMetrikaConfig,
34-
private router: Router,
35-
rendererFactory: RendererFactory2) {
28+
constructor(
29+
@Inject(YM_CONFIG) ymConfig: NgxMetrikaConfig,
30+
private router: Router,
31+
rendererFactory: RendererFactory2,
32+
@Inject(DOCUMENT) private document: Document,
33+
) {
3634
this.renderer = rendererFactory.createRenderer(null, null);
3735
if (ymConfig && ymConfig.id) {
3836
this.configure(ymConfig);
@@ -52,7 +50,7 @@ export class NgxMetrikaService {
5250
this.config = config;
5351
this.insertMetrika(config);
5452
this.checkCounter(config.id)
55-
.then(x => {
53+
.then(() => {
5654
this.hit.subscribe((y: MetrikaHitEventOptions) => {
5755
this.onHit(this.router.url, y.hitOptions);
5856
});
@@ -121,15 +119,15 @@ export class NgxMetrikaService {
121119
}
122120
});
123121

124-
const n = document.getElementsByTagName('script')[0];
122+
const head = this.document.getElementsByTagName('head')[0];
125123
const s = document.createElement('script');
126124
s.type = 'text/javascript';
127125
s.async = true;
128126
s.src = 'https://mc.yandex.ru/metrika/tag.js';
129-
const insetScriptTag = () => n.parentNode.insertBefore(s, n);
127+
const insetScriptTag = () => head.appendChild(s);
130128

131129
if ((window as any).opera === '[object Opera]') {
132-
document.addEventListener('DOMContentLoaded', insetScriptTag, false);
130+
this.document.addEventListener('DOMContentLoaded', insetScriptTag, false);
133131
} else {
134132
insetScriptTag();
135133
}
@@ -138,7 +136,7 @@ export class NgxMetrikaService {
138136

139137
checkCounter(id: string | number): Promise<any> {
140138
const that = this;
141-
return new Promise((resolve, reject) => {
139+
return new Promise((resolve) => {
142140
const counterName = `yacounter${id}inited`;
143141
that.renderer.listen('document', counterName, () => {
144142
resolve({});

0 commit comments

Comments
 (0)