function detectFeed(event) { // force application/rss+xml to text/xml so the browser displays it instead of downloading let isfeed = false; for (let header of event.responseHeaders) { if (header.name.toLowerCase() == 'content-type') { header.value = header.value.replace( /application\/(rss|atom)\+xml/, 'text/xml' ); isfeed = true; break; } } if (isfeed) { for (let i = 0; i < event.responseHeaders.length; i++) { if (event.responseHeaders[i].name.toLowerCase() == 'cache-control') { event.responseHeaders.splice(i, 1); break; } } // don't cache requests we modified // otherwise on reload the content-type won't be modified again event.responseHeaders.push({ name: 'Cache-Control', value: 'no-cache, no-store, must-revalidate', }); } return { responseHeaders: event.responseHeaders }; } const browser = window.browser || window.chrome; browser.webRequest.onHeadersReceived.addListener( detectFeed, { urls: [''], types: ['main_frame'] }, ['blocking', 'responseHeaders'] );