В расширении для 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 и всё таки загрузить нужный скрипт?
Решение заключается в добавлении 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",
...
]
Сборка персонального компьютера от Artline: умный выбор для современных пользователей