Я работаю над внутренним расширением Chrome, которое работает с внутренним сервером через API. Однажды мое расширение Chrome неожиданно перестало работать и начало выдавать ошибки. После долгого рытья я обнаружил, что мое расширение не работает из-за последнего обновления в Chrome. Обновленный хром блокировал мои ответы API, поэтому расширение выдавало ошибки. Прочитав журнал изменений для Chrome, я обнаружил, что в Chrome добавлены некоторые функции безопасности, из-за которых расширение не работает.

Chrome поддерживает разрешенный список затронутых расширений, которые могут продолжать делать такие запросы в настоящее время, но этот список доступен только для расширений, опубликованных в магазине Chrome. Чтобы ваше расширение временно оставалось в списке разрешенных сообщите об ошибке здесь.

Что нового в Chrome в контексте расширений Chrome?

Chrome недавно запустил новую функцию безопасности под названием Изоляция сайта. Чтобы предотвратить утечку конфиденциальной информации, веб-страницам обычно не разрешается получать данные из разных источников. В частности, изоляция сайта не только блокирует ответ, но и предотвращает доставку данных в процесс рендеринга Chrome, содержащий веб-страницу, с помощью функции, называемой Блокировка чтения из разных источников (CORB).

Скрипты контента создают проблему для изоляции сайта, потому что они выполняются в том же процессе рендеринга Chrome, что и веб-страница, на которой они работают.

Таким образом, скрипты содержимого теряют возможность получать данные из разных источников в разрешениях своего расширения, и они смогут получать только данные, к которым имеет доступ сама основная страница.

Для получения дополнительных данных сценарии содержимого могут отправлять сообщения на фоновые страницы своего расширения, которые могут передавать данные из источников, ожидаемых автором расширения.

Это изменение начинается в Chrome 73 (версия 73.0.3666.0).

Проверьте, не затронуто ли ваше расширение

Если ваше расширение выполняет выборку из разных источников из сценариев содержимого, то ваше расширение может быть повреждено, и вы можете наблюдать следующие ошибки в консоли DevTools:

Cross-Origin Read Blocking (CORB) blocked cross-origin response <URL> with MIME type <type>. See https://www.chromestatus.com/feature/5629709824032768 for more details.

Перенос перекрестных выборок из сценария содержимого в фоновый

Используйте хромированную модель передачи сообщений для связи между контентом contentcript.js и background.js.

contentcript.js

Вместо выполнения выборки из разных источников из contentcript.js мы можем отправить запрос в background.js, в обратном вызове мы получим ответ на сделанный запрос,

chrome.extension.sendRequest({title: 'showResponse'}, 
function (response) {
  
  console.log('Response From API', response);
});

background.js

background.js будет прослушивать такие запросы, обращаться к API и отправлять ответ обратно запрашивающей стороне.

chrome.extension.onRequest.addListener(function (message, sender, sendResponse) { 
 if (message.title === 'showResponse'){
  $.ajax({ 
    type: “GET”, 
    url: https://somesite.com/somelists
  }).done(function (success) {
    sendResponse(success);
  }).fail(function () {
    sendMessage(error);
  });
 }
}

Резюме

Удаление выборки из разных источников из скриптов контента - важный шаг в повышении безопасности Chrome, поскольку он помогает предотвратить утечку конфиденциальных данных, даже если процесс рендеринга Chrome может быть скомпрометирован.