Является ли call () синхронным, а apply () асинхронным? - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь перехватить вызовы функций на стороне клиента, и я написал этот скрипт для переопределения функции 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 ()?

...