(sentry) add rejection error to $loadScript for better troubleshooting

This commit is contained in:
Valentyne Stigloher 2024-03-09 14:48:26 +01:00
parent 0c2a5c7be1
commit 2366ccb2af

View File

@ -79,31 +79,27 @@ export default ({ app, store }: { app: Vue, store: Store<RootState> }): void =>
store.commit('showTranslationMode');
}
Vue.prototype.$loadScript = (name: string, src: string, nonce: string | undefined = undefined) => {
Vue.prototype.$loadScript = (name: string, src: string, nonce: string | undefined = undefined): Promise<void> => {
if (!process.client || document.querySelectorAll(`script.${name}-script`).length > 0) {
return new Promise((resolve) => {
resolve(null);
resolve();
});
}
let resolveFn: ((this: GlobalEventHandlers, event: Event) => any) | null = null;
let rejectFn: OnErrorEventHandler = null;
const promise = new Promise((resolve, reject) => {
resolveFn = resolve;
rejectFn = reject;
return new Promise((resolve, reject) => {
const script = document.createElement('script');
script.setAttribute('src', src);
if (nonce) {
script.setAttribute('nonce', nonce);
}
script.classList.add(`${name}-script`);
script.crossOrigin = 'true';
script.addEventListener('load', () => resolve());
script.addEventListener('error', (event) => {
reject(new Error(`failed to load ${name} (${src}): ${typeof event === 'string' ? event : event.type}`));
});
document.body.appendChild(script);
});
const s = document.createElement('script');
s.setAttribute('src', src);
if (nonce) {
s.setAttribute('nonce', nonce);
}
s.classList.add(`${name}-script`);
s.onload = resolveFn;
s.onerror = rejectFn;
document.body.appendChild(s);
return promise;
};
try {