@med1um

Как в расширении для chrome скачивать с без учёта CORS и CORB?

Пишу расширение которое парсит сайт. Для примера возьмём Авито.
В фоновом скрипте background.js всего одна функция:

setInterval(() => {
  var str = '';
  var request = new XMLHttpRequest();
  request.open('GET', 'https://www.avito.ru/vladimir/vakansii/it_internet_telekom-ASgBAgICAUSOC_SdAQ?cd=1', false);
  request.send();
  if (request.status === 200) {
    str = request.responseText.substring(0,11);
  }
  chrome.runtime.sendMessage(str);
}, 15000);


,которая должна скачать html-содержимое страницы (а далее уже парсит другой скрипт),
но background.js не скачивает - a выдает ошибку:

605113d2dd21d114118106.png

Подскажите что нужно сделать? Заголовки сервера изменить не могу.

в manifest.json сейчас такое содержимое:
{
  "description": "test1",
  "manifest_version": 2,
  "name": "test1",
  "version": "1.0",
  "icons": {
    "16": "icons/icon16.png",
    "32": "icons/icon32.png"
  },
  "browser_action": {
    "default_icon": {
      "16": "icons/icon16.png",
      "32": "icons/icon32.png"
    },
    "default_popup": "popup.html"
  },
  "background": {
    "scripts": [
      "background.js"
    ]
  }
}


Может быть в manifest.json нужно content_security_policy прописать?
Подскажите можно ли вобще с чужих доменов без CORS загружать данные с помощью расширений?
  • Вопрос задан
  • 59 просмотров
Пригласить эксперта
Ответы на вопрос 2
Kozack
@Kozack
Thinking about a11y
Попробуйте в поле permissions добавить
https://www.avito.ru/*
Ответ написан
Комментировать
zkrvndm
@zkrvndm
Архитектор решений
Пример кода для background.js - для коррекции заголовков ответа и обхода CORS:
// Обработчик для правки заголовков ответа:

chrome.webRequest.onHeadersReceived.addListener(

    function(info) {
	
		var headers = info.responseHeaders; // Получаем массив отсылаемых заголовков
		
		// Обходим массив полученных заголовков:
		
		for (var i=headers.length-1; i>=0; --i) {
			
			var header = headers[i].name.toLowerCase(); // Считываем название того или иного заголовка
			
			// При наличии совпадений, удаляем заголовок нахрен:
			
			if (header == 'content-security-policy' || header == 'access-control-allow-origin') { 
				headers.splice(i, 1);
			}
			
		}
		
		// Добавляем свой собственный разрешающий заголовок:
		headers.push({name: 'Access-Control-Allow-Origin', value: '*'});
		
		return {responseHeaders: headers}; // Вовращаем почищенный массив заголовков назад
		
    },
	
    { urls: [ '<all_urls>' ], types: [ 'xmlhttprequest' ] },
	
    ['blocking', 'responseHeaders']
	
);


При этом в манифесте расширения у вас должны быть прописаны разрешения:
...
"permissions" : [ "webRequest", "webRequestBlocking", "<all_urls>" ],
"background" : { "persistent": true, "scripts": [ "background.js" ] },
...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы