Я хочу создать расширение для браузера, которое создает боковую панель. Chrome не имеет первоклассной боковой панели, поэтому вместо этого мы должны поместить на страницу iframe. Однако на многих страницах это нарушается из-за политики безопасности содержимого. Например, GitHub использует CSP, который не позволяет вставлять в него фреймы с других сайтов. Например, если вы попытаетесь поместить сайт capitalone.com в iframe на GitHub, вы получите следующее:
Отказался от фрейма " https://www.capitalone.com/ ", поскольку он нарушает следующую директиву Политики безопасности содержимого: "frame-src 'self' render.githubusercontent.com www.youtube.com assets.braintreegateway.com".
Вот простое расширение браузера, чтобы воспроизвести это:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.status === 'complete') {
chrome.tabs.executeScript(tabId, { code: 'document.body.innerHTML=\'<iframe style=\"width:600px; height:600px\" src=\"https://www.capitalone.com/\"></iframe>\' + document.body.innerHTML;' }, function() {
console.log('Iframe injection complete');
})
}
}.bind(this));
Тем не менее, согласно Википедии, расширение браузера должно быть способно вставлять iframe, несмотря на любую политику безопасности контента:
Согласно Модели обработки CSP, [20] CSP не должен мешать работе надстроек или расширений браузера, установленных пользователем. Эта функция CSP позволяет любому дополнению или расширению вставлять сценарии в веб-сайты независимо от происхождения этого сценария и, таким образом, освобождается от политик CSP.
Есть ли какой-то другой способ, которым я должен вводить iframe помимо того, что я делаю?