diff --git a/src/run.js b/src/run.js index f2f9b367..eae32dfe 100644 --- a/src/run.js +++ b/src/run.js @@ -324,16 +324,15 @@ const processPage = ({ const isCssStyleTag = elem => elem.tagName === 'STYLE' && (!elem.type || elem.type.toLowerCase() === 'text/css'); + const isStylesheetLink = elem => elem.tagName === 'LINK' && elem.href && - (elem.rel.toLowerCase() === 'stylesheet' || - elem.href.toLowerCase().endsWith('.css')) && - !( - elem.href.toLowerCase().startsWith('data:') || - elem.href.toLowerCase().startsWith('blob:') || - elem.media.toLowerCase() === 'print' - ); + elem.rel.toLowerCase() === 'stylesheet' && + !elem.href.toLowerCase().startsWith('data:') && + !elem.href.toLowerCase().startsWith('blob:') && + elem.media.toLowerCase() !== 'print'; + // #fragments are omitted from puppeteer's response.url(), so // we need to strip them from stylesheet links, otherwise the // hrefs won't always match when we check for missing ASTs. diff --git a/tests/examples/resource-hinted-css.html b/tests/examples/resource-hinted-css.html new file mode 100644 index 00000000..00de64b2 --- /dev/null +++ b/tests/examples/resource-hinted-css.html @@ -0,0 +1,12 @@ + + +
+ + + + + + +defragmenting...
+ + diff --git a/tests/main.test.js b/tests/main.test.js index 067ac86e..92bfb95f 100644 --- a/tests/main.test.js +++ b/tests/main.test.js @@ -306,3 +306,8 @@ test('handles #fragments in stylesheet hrefs', async () => { const { finalCss } = await runMinimalcss('url-fragment'); expect(finalCss).toMatch('p{color:red}'); }); + +test('ignore resource hinted (preloaded or prefetched) css', async () => { + const { finalCss } = await runMinimalcss('resource-hinted-css'); + expect(finalCss).toMatch('p{color:red}'); +});