Скрипт заблокирован политикой CORS

В расширении для Chrome я пытаюсь загрузить некоторый скрипт с помощью XMLHttpRequest, но получаю следующую ошибку:

Access to XMLHttpRequest at '...' from origin '...' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Как обойти политику CORS и всё таки загрузить нужный скрипт?


Ответы (1 шт):

Автор решения: D .Stark

Решение заключается в добавлении background script, который регистрирует обработчик события получения заголовков ответа сервера. В обработчике необходимо добавить в ответ сервера заголовок access-control-allow-origin со значением * - это заставляет браузер думать, что содержимое ответа сервера может быть доступно для любого "origin", который отправил запрос.

background.js:

chrome.webRequest.onHeadersReceived.addListener(
    function (details) {
        var rule = {
            "name": "access-control-allow-origin",
            "value": "*"
        };
        details.responseHeaders.push(rule);
        return { responseHeaders: details.responseHeaders };
    },
    { urls: ["<all_urls>"] },
    ["blocking", "responseHeaders", "extraHeaders"]);

Так же добавим следующие строки в manifest.json:

"background": {
    "scripts": [ "background.js" ],
    "persistent": true
},
"permissions": [
    "webRequest",
    "webRequestBlocking",
    ...
]
→ Ссылка