Показать сообщение отдельно
  #9 (permalink)  
Старый 19.01.2024, 00:29
Аспирант
Отправить личное сообщение для Arigato Посмотреть профиль Найти все сообщения от Arigato
 
Регистрация: 11.12.2011
Сообщений: 42

Сообщение от MallSerg Посмотреть сообщение
Что бы обойти эту проблему скрипт должен обращаться с запросами к расширению а уже расширение должно отправлять запросы к серверу в интернете
В общем получилось следующим образом. В манифесте:

"permissions": ["scripting", "activeTab", "storage", "webRequest"],
"host_permissions": ["*://*.site.com/*"],
"background": {
	"service_worker": "scripts/service-worker.js"
},


В service-worker.js реализовал обработчик сообщений, суть в том, чтобы просто делать запросы куда просят:

chrome.runtime.onConnect.addListener(function(port) {
	port.onMessage.addListener(function(request) {
		if (port.name === "request") {
			const url = request.url;
			//console.log(url);
			fetch(url).then((response) => {
				let resp = {ok: response.ok}
				if (response.ok) {
					response.text().then((text) => {
						resp.text = text;
						port.postMessage(resp);
					});
				} else {
					port.postMessage(resp);
				}
			});
		}
	});
});


В content_scripts вместо обычного fetch() отправляется сообщение в service_worker с запросом нужного url:

let fetchResponse = (response) => {
	if (response.ok) {
		console.log(response.text);
	} else {
		console.log('ERROR');
	}
}

const port = chrome.runtime.connect({name: "request"});
port.postMessage({url: url});
port.onMessage.addListener(fetchResponse);


Работает.

Последний раз редактировалось Arigato, 19.01.2024 в 00:59.
Ответить с цитированием