Javascript - Отслеживайте любой xmlhttprequest

Могу ли я проверить любой XmlHttpRequest, исполняемый на странице, не добавляя addEventListener каждый из них? я пытаюсь добавить

document.addEventListener("loadend"...)

но ничего не произошло. Похоже, запросы не имеют глобальных событий?

// ОТРЕДАКТИРОВАНО //

Мне нужно обнаружить новые элементы, которые загружаются с помощью ajax. Отличное решение для этого - здесь

Использование MutationObserver

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
189
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я думаю, вам стоит пересмотреть свой дизайн. Почему ты хочешь сделать это. Есть ли лучшие варианты?

Однако, если вы действительно хотите это сделать, вы можете «взломать» его, перезаписав стандартный объект XmlHttpRequest своим собственным. Вам нужно будет сделать это до того, как будет инициирован какой-либо XmlHttpRequest, чтобы он работал для всех объектов.

//store the original XMLHttpRequest in a variabele so you can use it yourself
var originalXMLHttpRequest = XMLHttpRequest;

//Overwrite the original object with your own in which you create an instance of the original object, add an event listner to it and return that.
XMLHttpRequest = function() {
  var req = new originalXMLHttpRequest();
  req.addEventListener("loadend", function() {
    console.info("loadend event fired");
  });
  return req;
};

//Test if it works
httpReq = new XMLHttpRequest();
httpReq.open("GET", "https://stackoverflow.com/");
httpReq.send();

Спасибо, попробую. Я пишу собственный css для просмотра веб-приложений Android по целевому сайту. Все хорошо, но сайт не может иметь классы или идентификатор или другие вещи для выбора css. Итак, все ссылки просто <a> :) И я использую javascript для добавления классов. Но на сайте есть загружаемый с помощью ajax новый контент, который я не могу обработать с помощью своего скрипта, который запускается при полной загрузке страницы.

Сергей Кириллов 07.03.2019 13:00

Возможно, вы захотите изучить объект MutationObserver. Я думаю, что это был бы лучший инструмент для работы.

Mark Baijens 07.03.2019 13:24

Именно то, что нужно! Спасибо!

Сергей Кириллов 07.03.2019 13:33

Сделайте так, чтобы ваши XMLHttpRequest запускали пользовательское событие, когда они были готовы, а затем прослушивали эти события.

var r = new XMLHttpRequest();
r.onload = function() {
    e = new CustomEvent('myLoadend', {detail: {foo: 'bar'}});
    document.dispatchEvent(e);
}

И послушайте те события:

document.addEventListener("myLoadend"...)

Я не могу получить доступ к исходному событию.

Сергей Кириллов 07.03.2019 13:05

Какое оригинальное событие? Может быть, вы имеете в виду просьбы?

mori 07.03.2019 13:09

Да. Пишу код для андроид приложения, индивидуальный дизайн для сайта. Невозможно изменить исходный css или js.

Сергей Кириллов 07.03.2019 13:11

Другие вопросы по теме