Firefox WebExtensions API, как сделать AJAX-вызов на текущей вкладке сайта

Я хочу, чтобы мое веб-расширение осуществляло вызов AJAX на веб-сайт, на который в данный момент смотрит пользователь. Я знаю, что у текущего веб-сайта есть конечная точка, доступная в /foo/bar?query=,

Что-то мешает мне использовать API выборки или запрос XMLHttpRequest для связи с этой конечной точкой?

Мои попытки использовать эти методы просто говорят мне, что произошла ошибка сервера, и на вкладке сети ничего не появляется, пока я пытаюсь отладить свое расширение. Я чувствую, что для этой задачи должен быть API WebExtensions, но я не могу его найти.

1 ответ

Решение

Вы можете получить объект, описывающий текущую вкладку, на которую смотрит пользователь, используя browser.tabs.getCurrent() , Этот объект имеет свойство url , который затем можно использовать для создания XMLHttpRequest.

browser.tabs.getCurrent().then(currentTab => {
    let xhr = new XMLHttpRequest();
    xhr.open("GET", currentTab.url);
    // ...
});

Редактировать:
Как отметил Макьен, tabs.currentTab на самом деле не то, что вы хотите. Вместо tabs.query с active: true должен быть использован. Нечто подобное должно работать:

browser.tabs.query({active: true, currentWindow: true}).then(tabs => {
    let currentTab = tabs[0];
    let xhr = new XMLHttpRequest();
    xhr.open("GET", currentTab.url);
    // ...
})

Для того, чтобы отправлять запросы из разных стран, вам необходимо получить разрешение на manifest.json файл:

{
  ...
  "permissions": [
    "tabs",
    "<all_urls>"
  ],
  ...
}

<all_urls> например, позволит вам сделать http-запросы на любой URL.

Вы можете прочитать больше здесь.

Другие вопросы по тегам