Перехват или перехват вызовов Ajax с помощью Javascript

Можно ли создать Javascript и включить его на веб-страницу, чтобы функция этого JS «перехватывала» все запросы GET или любые другие вызовы Ajax, сделанные из любого другого Javascript на странице? Либо зарегистрировать его, либо просто показать его в окне оповещения.

«Другой Javascript», который будет выполнять вызовы GET или Ajax, является произвольным. Я имею в виду, что я не могу контролировать это с точки зрения того, что это такое.

И после того, как меня поймали, мне нужно проверить, какой Javascript выполняет какие вызовы GET или Ajax.

Это возможно?


person quarks    schedule 29.03.2012    source источник
comment
Вам это нужно для отладки? Во всех основных браузерах это встроено.   -  person Yoshi    schedule 29.03.2012
comment
На данный момент, поскольку кажется, что с простым Javascript это непросто, возможно, я могу использовать плагин для браузера, однако Firebug не показывает, например, какой Javascript инициировал метод GET...   -  person quarks    schedule 29.03.2012
comment
... но мое требование на самом деле не для отладки, а для реальной функции приложения.   -  person quarks    schedule 29.03.2012
comment
... но мое требование на самом деле не для отладки, а для реальной функции приложения.   -  person quarks    schedule 29.03.2012
comment
Затем протестируйте решение @Jasd. Наверное, это правильное направление. Хотя вам нужно убедиться, что ваш код запускается до первого запроса ajax.   -  person Yoshi    schedule 29.03.2012
comment
@Yoshi да, я проверил это, и это сработало для части Ajax.   -  person quarks    schedule 29.03.2012


Ответы (2)


Попробуйте этот фрагмент. Он расширяет функцию send, чтобы вы могли выполнять что-то до или после реальной отправки.

XMLHttpRequest.prototype.reallySend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(body) {
    // Do something...
    this.reallySend(body);
};
var req = new XMLHttpRequest();
req.open("GET", "any.html", true);
req.send(null);
person Johannes Egger    schedule 29.03.2012
comment
Это сработало, и я смог перехватить вызов Ajax, однако я не перехватил запрос HTML, который ожидал, вероятно, потому, что это не вызов Ajax. Знаете ли вы, как перехватывать события GET, вызванные Javascript? - person quarks; 29.03.2012
comment
@xybrek Вы можете использовать этот подход в качестве шаблона. Что вам нужно сделать, так это применить это к каждому методу, который javascript должен делать запросы (например, объект изображения, <script>-элементы и многие другие). - person Yoshi; 29.03.2012
comment
@xybrek К сожалению, я не знаю такого события. Возможно, лучше последовать совету Йоши и реализовать решение для каждого элемента, который может заставить браузер сделать запрос. - person Johannes Egger; 29.03.2012
comment
@Yoshi, можешь привести какой-нибудь пример своего подхода? - person quarks; 29.03.2012
comment
@xybrek похожий вопрос: stackoverflow.com/a/9676178/697154 надеюсь, что это поможет - person Yoshi; 29.03.2012

const nativeOpen = XMLHttpRequest.prototype.open;

const proxiedOpen = function () {
  if (arguments[1].includes('youUrl.com')) {
    // do some ...
  }
  nativeOpen.apply(this, arguments);
};

Обратитесь к ответу:

Перехватить и изменить результаты вызова ajax

person weiya ou    schedule 11.10.2020
comment
зачем отвечать на 8-летний вопрос, который был решен...? - person Christophe; 11.10.2020
comment
Я искал связанные вопросы и нашел этот вопрос, так что ... больше справочных ответов - это неплохо. - person weiya ou; 11.10.2020