Кросс-доменные запросы из injected script
Ситуация такова: расширение внедряет некоторый скрипт в страницу, который должен выполнить кросс-доменный запрос. Соответственно, страница блокирует запрос, печатая следующую ошибку:
Refused to connect to 'https://example.com/script.js' because it violates the following Content Security Policy directive: "connect-src 'self' blob: blob ...
Так же я заметил, что над XMLHttpRequest существует некоторая обёртка (поскольку ошибка происходит не на вызове метода open, а на вызове другого метода, который следует за ним). Как можно решить данную проблему? Ошибка довольно таки "стандартная" для таких ситуаций, и мне кажется обёртка тут роли не играет, я прав?
Ответы (1 шт):
Это решается просто. В первую очередь, у расширения должны быть права на домен - или на конкретный или "<all_urls>". Подробнее об этом можно почитать здесь.
Далее. Если вы будете подключать скрипт через .appendChild(scriptElement), загруженный скрипт будет исполнятся в контексте страницы, на него будут действовать ограничения контекста страницы и не будут действовать полномочия расширения.
Вам нужно подключить скрит через манифест или програмно из background.js. В таком случае расширение сможет слать запросы куда захотите, будет иметь доступ к DOM страницы, НО у него не будет доступа к переменным области видимости обычных переменных сайта.
Такое ограничение обходится просто: подключается один скрипт первым способом, один - вторым, и они общаются с помощю window.postMessage.