Tampermonkey GM_xmlhttpRequest не отправляет запрос должным образом - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь реализовать скрипт tampermonkey, который запускает API-вызов к экземпляру Jira, чтобы создать заявку с некоторой информацией, найденной на странице, на которой я нахожусь (в другом домене). Вот что я пробовал:

async function createJiraTicket() {
      let elements = await obtainThingsForCreatingJiraTicket();
      let createJiraTicketUrl = `https://${jiraDomain}/rest/api/latest/issue`;
      let requestDataForCreation =`
      {
        "fields": {
            "project": { "key": "${elements.project}" },
            "summary": "${elements.title}",
            "description": "nothing",
            "issuetype": {"name": "Issue" }
           }
      }`;
    GM_xmlhttpRequest ( {
        method:     "POST",
        url:        `${http}://${createJiraTicketUrl}`,
        user: 'user:pwd',      // also tried user:'user', password:'pwd',
        data:       requestDataForCreation,
        header: 'Accept: application/json',
        dataType: 'json',
        contentType: 'application/json',
        onload:     function (response) {
           jiraTicketLog(`[Ajax] Response from Ajax call Received: `);
        }
} );

Однако, когда я запускаю createJiraTicket (), я получаю следующую ошибку:

Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
    at <anonymous>:1:7

Я установил правильные теги @connect для сценарий, так что я совершенно не знаю, в чем проблема ...

Может кто-нибудь помочь? Спасибо

1 Ответ

0 голосов
/ 26 марта 2020

Итак, я придумал ответ, чтобы исправить это, по-видимому, это было несколько разных деталей: Итак,

  • Авторизация должна быть включена в заголовки, закодированы на base64 и с ключевым словом "Basi c".
  • User-Agent необходимо переопределить на заголовках с любой фиктивной строкой.
  • overrideMimeType необходимо установить на json.

Вот и все. Это был рабочий код.

let createJiraTicketUrl = `//${jiraDomain}/rest/api/latest/issue`;
let authentication = btoa('admin:foobar1');

GM.xmlHttpRequest({
    method: "POST",
    headers: {
        'Accept': 'application/json',
        "Content-Type": "application/json",
        "Authorization": `Basic ${authentication}`,
        "User-Agent": "lolol"
    },
    url: `${http}:${createJiraTicketUrl}`,
    data: JSON.stringify(requestDataForCreation),
    dataType: 'json',
    contentType: 'application/json',
    overrideMimeType: 'application/json',
    onload: function (response) {
        let url = `${http}://${jiraDomain}/browse/${JSON.parse(response.response).key}`;
        log(`${JSON.parse(response.response).key} ticket created: ${url}`);
        openJiraTicket(url);
    }
...