(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'); 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) { if (!process.client || document.querySelectorAll(`script.${name}-script`).length > 0) {
return new Promise((resolve) => { return new Promise((resolve) => {
resolve(null); resolve();
}); });
} }
let resolveFn: ((this: GlobalEventHandlers, event: Event) => any) | null = null; return new Promise((resolve, reject) => {
let rejectFn: OnErrorEventHandler = null; const script = document.createElement('script');
const promise = new Promise((resolve, reject) => { script.setAttribute('src', src);
resolveFn = resolve;
rejectFn = reject;
});
const s = document.createElement('script');
s.setAttribute('src', src);
if (nonce) { if (nonce) {
s.setAttribute('nonce', nonce); script.setAttribute('nonce', nonce);
} }
s.classList.add(`${name}-script`); script.classList.add(`${name}-script`);
s.onload = resolveFn; script.crossOrigin = 'true';
s.onerror = rejectFn; script.addEventListener('load', () => resolve());
document.body.appendChild(s); script.addEventListener('error', (event) => {
reject(new Error(`failed to load ${name} (${src}): ${typeof event === 'string' ? event : event.type}`));
return promise; });
document.body.appendChild(script);
});
}; };
try { try {