Я пытаюсь перехватить вызовы функций на стороне клиента, и я написал этот скрипт для переопределения функции XMLHttpRequest.prototype.open. Однако использование call () прерывает выборочные запросы в Chrome! Причина дана -
Синхронный запрос XMLHttpRequest в основном потоке устарел из-за его пагубных последствий для конечного пользователя. Для получения дополнительной помощи, проверьте https://xhr.spec.whatwg.org/.
Когда я заменяю вызов функции () на apply (), предупреждение исчезает и запросы снова работают.
Оригинал:
!(function(open) {
XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
// dostuff
open.call(this, method, newURL, async, user, password);
};
})(XMLHttpRequest.prototype.open);
Новый (рабочий):
!(function(open) {
XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
// dostuff
open.apply(this, arguments);
};
})(XMLHttpRequest.prototype.open);
Хотя код работает - я беспокоюсь, что это не изменит основную проблему. Когда спецификация выборки догоняет, это может снова нарушить функциональность перехвата. Кто-нибудь знает, есть ли действительно разница между синхронизацией и асинхронностью в call () и apply ()?