3

Существует webapp, который делает запрос (назовем его /api/item). Этот запрос возвращает тело json с полем itemData, которое обычно скрыто от пользователя, но я хочу сделать это.Как перехватить вызов API и отобразить данные с него с помощью UserScript?

Так как я могу сделать usercript, который прослушивает запрос на /api/item и отображает поле itemData?

Для справки путь веб-приложение делает запрос является:

return Promise.resolve(new Request(e,r)).then(sendCookies).then(addLangParam).then(addCacheParam).then(addXsrfKey).then(checkZeroRating).then(function(e) { 
      return fetch(e) 
     }).then(checkStatus).then(checkApiVersionMismatch).then(checkApiResponse) 

Большинство это не имеет значения, но важная часть Request (я думаю).

+0

Этот код от обслуживающего персонала приложения? Вы не можете перехватить его в usercript. В противном случае попробуйте cloaking 'fetch' или XMLHttpRequest открыть/отправить. – wOxxOm

+0

@wOxxOm Я пробовал клоакинг 'XMLHttpRequest.prototype.open' - но это не захватывает вызов, который я хочу, только куча случайных других вызовов. Что касается того, что происходит, что делать, и как это сделать? – ReverseCold

ответ

3

Этот webapp не использует XMLHttpRequest, но Fetch API.

Вы можете использовать fetch-intercept npm module для перехвата запросов на выборку. Пример кода:

import fetchIntercept from 'fetch-intercept' 

fetchIntercept.register({ 
    response(response) { 
    console.log(response) 
    return response 
    } 
}) 
+0

Да, но это не работает в usercript. Я не могу «npm install» что-либо из пользовательского. – ReverseCold

+1

Просто используйте исходный код этого модуля в качестве примера. Там, например, одна страница. – wOxxOm

+0

@wOxxOm У этого есть зависимости. – ReverseCold

0

У вас есть доступ к обеим предметам?

Если это так, то вы можете добавить еще один «затем». В противном случае вы можете перезаписать «checkApiResponse»

0

Чтобы дополнить ответ @ michał-perłakowski. Если вы не используете npm, и хотите просто добавить в свой HTML-код fetch-intercept, то вы можете использовать чистый эквивалентный модуль JavaScript.

Смежные вопросы