В настоящее время я использую ApplicationInsights-JS в своем прогрессивном веб-приложении.Он работает в моих компонентах реагирования, поскольку я могу импортировать то, что мне нужно, из соответствующих пакетов npm.
Однако в моем сервисном работнике я могу импортировать логику только с помощью importScripts.
Мне удалось найтиCDN для ApplicationInsights-JS на их странице Github, однако кажется, что для того, чтобы инициализировать понимание приложения с помощью этой библиотеки, вам нужно иметь доступ к окну, чтобы хранить дополнения, что вы не можете сделать из сервисного работника.
Я пытался использовать подход веб-фрагмента, поскольку CDN, похоже, был связан с этой конкретной библиотекой, но я не могу использовать окно и не уверен, как еще реализовать это решение.
Это копиявставка предложенного фрагмента для инициализации объекта insights приложения из: https://github.com/Microsoft/ApplicationInsights-JS
importScripts('https://az416426.vo.msecnd.net/beta/ai.2.min.js');
const sdkInstance = 'appInsightsSDK';
window[sdkInstance] = 'appInsights';
const aiName = window[sdkInstance];
const aisdk =
window[aiName] ||
(function(e) {
function n(e) {
i[e] = function() {
const n = arguments;
i.queue.push(function() {
i[e](...n);
});
};
}
let i = { config: e };
i.initialize = !0;
const a = document;
const t = window;
setTimeout(function() {
const n = a.createElement('script');
(n.src = e.url || 'https://az416426.vo.msecnd.net/next/ai.2.min.js'),
a.getElementsByTagName('script')[0].parentNode.appendChild(n);
});
try {
i.cookie = a.cookie;
} catch (e) {}
(i.queue = []), (i.version = 2);
for (
const r = [
'Event',
'PageView',
'Exception',
'Trace',
'DependencyData',
'Metric',
'PageViewPerformance'
];
r.length;
)
n(`track${r.pop()}`);
n('startTrackPage'), n('stopTrackPage');
const o = `Track${r[0]}`;
if (
(n(`start${o}`),
n(`stop${o}`),
!(
!0 === e.disableExceptionTracking ||
(e.extensionConfig &&
e.extensionConfig.ApplicationInsightsAnalytics &&
!0 ===
e.extensionConfig.ApplicationInsightsAnalytics
.disableExceptionTracking)
))
) {
n(`_${(r = 'onerror')}`);
const s = t[r];
(t[r] = function(e, n, a, t, o) {
const c = s && s(e, n, a, t, o);
return (
!0 !== c &&
i[`_${r}`]({
message: e,
url: n,
lineNumber: a,
columnNumber: t,
error: o
}),
c
);
}),
(e.autoExceptionInstrumented = !0);
}
return i;
})({ instrumentationKey: 'xxx-xxx-xxx-xxx-xxx' });
(window[aiName] = aisdk),
aisdk.queue && aisdk.queue.length === 0 && aisdk.trackPageView({});
Я получаю окно не определено, что ожидается, но я не уверен, как еще я могу использовать эту библиотекуот обслуживающего работника.
Кто-нибудь еще имел подобную реализацию, в которой он успешно регистрировал телеметрию, используя ApplicationInsights от работника службы?