REST с CORS не работает с содержимым WebExtension-script

#javascript #rest #cors #firefox-addon #firefox-addon-webextensions

#javascript #rest #cors #firefox-дополнение #firefox-дополнение-webextensions

Вопрос:

Я работаю над webextension в Firefox для внутреннего использования на работе. Целью расширения является вставка соответствующей информации из нашего экземпляра ServiceNow на страницу хоста / сервиса Nagios.

В настоящее время я пытаюсь вставить состояние заявок на вкладку истории Nagios. Мой скрипт выглядит следующим образом:

 var table = document.getElementById('id_historytab_table');
var table = table.getElementsByTagName('tbody');
var table = table[1];
var len = table.children.length

const url = "https://[domain].service-now.com/api/now/table/task?sysparm_limit=1amp;number="

for (i = 1; i <= len; i  ) {
    var col = table.rows[i].cells[2];
    if (col.textContent.startsWith("TKT")) {
        var tkt = col.textContent;
        //console.log(tkt);
        //console.log(url tkt);

        var invocation = new XMLHttpRequest();
        invocation.open("get",url tkt, true);
        invocation.withCredentials = true;
        invocation.onreadystatechange = function() { 
            if(this.readyState == this.DONE) {
                //console.log('recieved');
                console.log(invocation.responseText);
                //console.log(JSON.parse(invocation.responseText).result[0].state);
            }
        }; 

        invocation.send();
    };
};
  

Это успешно получает номер билета из каждой строки вкладки истории и выполняет запрос GET. Я могу видеть запросы в моем журнале ServiceNow REST, и там все выглядит хорошо. Однако ответ так и не получен.

Если я скопирую и вставлю вышеуказанное из своего content-script.js и помещу его непосредственно в свою консоль, я смогу перебирать строки, получать номера заявок и успешно получать ответы от ServiceNow. Итак, это работает, но по какой-то причине не в WebExtension. Однако я нахожусь на пределе своих знаний о расширениях и javascript и не уверен, что еще можно сделать.

Ответ №1:

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

 "permissions": [ "url" ],
  

проблемы устранены, и я сразу же начал видеть тела ответов, которые я ожидал.