Как мне обойти Angular, отменив исправления моей обезьяны своими собственными исправлениями обезьяны? - PullRequest
3 голосов
/ 13 июня 2019

Я бы хотел перехватывать запросы XHR для API Карт Google, чтобы я мог запускать их через собственный прокси-сервер, чтобы сохранить конфиденциальность моего ключа API.

Angular имеет свои собственные HttpInterceptor s, но они будут перехватывать только XHR-запросы, сделанные с помощью HttpClient Angular, а не любые запросы, сделанные вне рамок Angular посредством API-интерфейса Maps. Я бы подумал, что исправление обезьяны XMLHttpRequest.open() будет лучшим способом получить доступ к запросам к API Карт, что я и сделал следующим образом:

  var oldXHROpen = XMLHttpRequest.prototype.open;

  XMLHttpRequest.prototype.open = function(method, url, async, username, password) {
    console.log(url);
    return oldXHROpen.apply(this, arguments);
  };

Приведенный выше код помещен в <script> в секции <head> моего index.html, поэтому он обязательно выполняется перед выполнением любого кода Angular.

Патч работает ... на короткое время. Я вижу URL для нескольких ресурсов, загруженных моим кодом, вышли из системы, но затем появляется это сообщение:

Angular is running in the development mode. Call enableProdMode() to enable the production mode.

После этого регистрируется еще один URL, и это последний перехват, который я делаю. XHR-запросы продолжают обрабатываться, но мой патч никогда не видит, чтобы они происходили.

Я уверен, что это как-то связано с zone.js, но я до сих пор не понимаю, как это могло произойти. Поскольку я переопределяю XMLHttpRequest.prototype.open до того, как Angular или zone.js даже получат возможность увидеть оригинальную функцию open(), которая скрыта в переменной oldXHROpen, как прямое соединение с нативным open() когда-либо удается случится снова, минуя мой патч?

1 Ответ

1 голос
/ 14 июня 2019

Похоже, я работал над ложной предпосылкой, что клиентская часть API Карт Google должна будет делать XHR-запросы для выполнения своей работы.

Это не так.Все это делается путем загрузки изображений, CSS и шрифтов с добавлением небольшого количества JSONP.

Мое исправление обезьяны действительно работает, а не не отменяется Angular.

...