From 90276a2cd87d1d1f19617a552af0871655855e62 Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Sat, 10 Dec 2022 00:12:00 +0100 Subject: [PATCH] feat(goto): add onPageRequest --- README.md | 14 ++++++++++---- packages/goto/src/index.js | 33 +++++++++++++++++++++------------ 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 8b6d3d9a79..095324b722 100644 --- a/README.md +++ b/README.md @@ -550,6 +550,13 @@ type: `string` | `string[]`
Click the DOM element matching the given [CSS selector](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors). +##### colorScheme + +type: `string`
+default: `'no-preference'` + +Sets [prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme) CSS media feature, used to detect if the user has requested the system use a `'light'` or `'dark'` color theme. + ##### device type: `string`
@@ -654,12 +661,11 @@ const buffer = await browserless.screenshot(url.toString(), { }) ``` -##### colorScheme +##### onPageRequest -type: `string`
-default: `'no-preference'` +type:`function` -Sets [prefers-color-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme) CSS media feature, used to detect if the user has requested the system use a `'light'` or `'dark'` color theme. +Associate a handler for every request in the page. ##### scripts diff --git a/packages/goto/src/index.js b/packages/goto/src/index.js index a989c0bf25..1dac7e6bc4 100644 --- a/packages/goto/src/index.js +++ b/packages/goto/src/index.js @@ -212,6 +212,7 @@ module.exports = ({ waitForXPath, waitUntil = 'auto', waitUntilAuto = _waitUntilAuto, + onPageRequest, ...args } ) => { @@ -244,19 +245,27 @@ module.exports = ({ ) } + const enableInterception = + (onPageRequest || abortTypes.length > 0) && page.setRequestInterception(true) + + if (onPageRequest) { + Promise.resolve(enableInterception).then(() => page.on('request', onPageRequest)) + } + if (abortTypes.length > 0) { - await page.setRequestInterception(true) - page.on('request', req => { - if (req.isInterceptResolutionHandled()) return - const resourceType = req.resourceType() - const url = truncate(req.url()) - - if (!abortTypes.includes(resourceType)) { - debug('continue', { url, resourceType }) - return req.continue(req.continueRequestOverrides(), 0) - } - debug('abort', { url, resourceType }) - return req.abort('blockedbyclient', 0) + Promise.resolve(enableInterception).then(() => { + page.on('request', req => { + if (req.isInterceptResolutionHandled()) return + const resourceType = req.resourceType() + const url = truncate(req.url()) + + if (!abortTypes.includes(resourceType)) { + debug('continue', { url, resourceType }) + return req.continue(req.continueRequestOverrides(), 0) + } + debug('abort', { url, resourceType }) + return req.abort('blockedbyclient', 0) + }) }) }