Неизвестная ошибка при выполнении fetch/XMLHttpRequest
Я пишу расширение для браузера, которое в чатах вконтакте заменяет гифки на граффити. Алгоритм прост: каждые 500 мс на странице чата проходим по каждому сообщению, ищем гифки, переходим по ссылке на gif-документ, парсим полученную html-страницу и вытягиваем оттуда ссылку на gif-изображение, затем в DOM-структуре заменяем gif-документ на анимированную gif-картинку. На моём компьютере в Chrome и в Firefox всё работает без проблем. Однако у друга в Firefox наблюдается очень странное поведение. Какое-то время всё работает нормально, но затем при попытке перейти по ссылке на gif-документ начинает возникать ошибка, и помогает только перезапуск браузера. Сперва я в коде использовал функцию fetch, тогда в консоли была ошибка "TypeError: NetworkError when attempting to fetch resource." Никакого решения этой ошибки мне найти не удалось. Потом решил попробовать XMLHttpRequest, но он тоже возвращает ошибку с кодом 0 и без какого-либо описания. Помогите, пожалуйста, обойти эту ошибку.
Код функции с fetch:
let response = await fetch("https://vk.com" + url + hash, {
}).catch(reason => console.log(count + ": Ошибка HTTP: " + reason + "; гифка #" + n));
console.log(count + ": Код ответа: " + response.status);
if (response.ok) {
console.log(count + ": Гифка #" + n + " получена, парсим страницу гиф-документа");
// страница гиф-документа
let html = await response.text();
let doc = new DOMParser().parseFromString(html, "text/html");
let img = doc.body.getElementsByClassName("can_zoom")[0];
// считываем ссылку на гифку
let src = img.getAttribute("src");
// обрезаем параметры
src = src.substring(0, src.indexOf("?"));
localStorage.setItem(url, src);
console.log(count + ": Ссылка на гифку #" + n + ": " + src);
return src;
}
else console.log(count + ": Ошибка HTTP: " + response.status + "гифка #" + n);
Код функции с XMLHttpRequest:
let getGifImage = (url, hash, n) => new Promise(resolve => {
let xhr = new XMLHttpRequest();
xhr.open("GET", "https://vk.com" + url + hash);
xhr.send();
xhr.onloadend = function () {
console.log(count + ": Код ответа: " + this.status);
if (this.status == 200) {
console.log(count + ": Гифка #" + n + " получена, парсим страницу гиф-документа");
// страница гиф-документа
let html = xhr.response;
let doc = new DOMParser().parseFromString(html, "text/html");
let img = doc.body.getElementsByClassName("can_zoom")[0];
// считываем ссылку на гифку
let src = img.getAttribute("src");
// обрезаем параметры
src = src.substring(0, src.indexOf("?"));
localStorage.setItem(url, src);
console.log(count + ": Ссылка на гифку #" + n + ": " + src);
resolve(src);
} else console.log(count + ": Ошибка HTTP (код ответа: " + this.status + "), гифка #" + n);
};
});