feat: add page.removeExposedFunction
(#10297)
This commit is contained in:
parent
4764b9a079
commit
4d0dbbc517
@ -126,6 +126,7 @@ page.off('request', logRequest);
|
|||||||
| [pdf(options)](./puppeteer.page.pdf.md) | | Generates a PDF of the page with the <code>print</code> CSS media type. |
|
| [pdf(options)](./puppeteer.page.pdf.md) | | Generates a PDF of the page with the <code>print</code> CSS media type. |
|
||||||
| [queryObjects(prototypeHandle)](./puppeteer.page.queryobjects.md) | | This method iterates the JavaScript heap and finds all objects with the given prototype. |
|
| [queryObjects(prototypeHandle)](./puppeteer.page.queryobjects.md) | | This method iterates the JavaScript heap and finds all objects with the given prototype. |
|
||||||
| [reload(options)](./puppeteer.page.reload.md) | | |
|
| [reload(options)](./puppeteer.page.reload.md) | | |
|
||||||
|
| [removeExposedFunction(name)](./puppeteer.page.removeexposedfunction.md) | | The method removes a previously added function via $[Page.exposeFunction()](./puppeteer.page.exposefunction.md) called <code>name</code> from the page's <code>window</code> object. |
|
||||||
| [removeScriptToEvaluateOnNewDocument(identifier)](./puppeteer.page.removescripttoevaluateonnewdocument.md) | | Removes script that injected into page by Page.evaluateOnNewDocument. |
|
| [removeScriptToEvaluateOnNewDocument(identifier)](./puppeteer.page.removescripttoevaluateonnewdocument.md) | | Removes script that injected into page by Page.evaluateOnNewDocument. |
|
||||||
| [screenshot(options)](./puppeteer.page.screenshot.md) | | Captures screenshot of the current page. |
|
| [screenshot(options)](./puppeteer.page.screenshot.md) | | Captures screenshot of the current page. |
|
||||||
| [screenshot(options)](./puppeteer.page.screenshot_1.md) | | |
|
| [screenshot(options)](./puppeteer.page.screenshot_1.md) | | |
|
||||||
|
25
docs/api/puppeteer.page.removeexposedfunction.md
Normal file
25
docs/api/puppeteer.page.removeexposedfunction.md
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
sidebar_label: Page.removeExposedFunction
|
||||||
|
---
|
||||||
|
|
||||||
|
# Page.removeExposedFunction() method
|
||||||
|
|
||||||
|
The method removes a previously added function via $[Page.exposeFunction()](./puppeteer.page.exposefunction.md) called `name` from the page's `window` object.
|
||||||
|
|
||||||
|
#### Signature:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
class Page {
|
||||||
|
removeExposedFunction(name: string): Promise<void>;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
| Parameter | Type | Description |
|
||||||
|
| --------- | ------ | ----------- |
|
||||||
|
| name | string | |
|
||||||
|
|
||||||
|
**Returns:**
|
||||||
|
|
||||||
|
Promise<void>
|
@ -1279,6 +1279,15 @@ export class Page extends EventEmitter {
|
|||||||
throw new Error('Not implemented');
|
throw new Error('Not implemented');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The method removes a previously added function via ${@link Page.exposeFunction}
|
||||||
|
* called `name` from the page's `window` object.
|
||||||
|
*/
|
||||||
|
async removeExposedFunction(name: string): Promise<void>;
|
||||||
|
async removeExposedFunction(): Promise<void> {
|
||||||
|
throw new Error('Not implemented');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provide credentials for `HTTP authentication`.
|
* Provide credentials for `HTTP authentication`.
|
||||||
*
|
*
|
||||||
|
@ -147,6 +147,7 @@ export class CDPPage extends Page {
|
|||||||
#emulationManager: EmulationManager;
|
#emulationManager: EmulationManager;
|
||||||
#tracing: Tracing;
|
#tracing: Tracing;
|
||||||
#bindings = new Map<string, Binding>();
|
#bindings = new Map<string, Binding>();
|
||||||
|
#exposedFunctions = new Map<string, string>();
|
||||||
#coverage: Coverage;
|
#coverage: Coverage;
|
||||||
#javascriptEnabled = true;
|
#javascriptEnabled = true;
|
||||||
#viewport: Viewport | null;
|
#viewport: Viewport | null;
|
||||||
@ -705,10 +706,16 @@ export class CDPPage extends Page {
|
|||||||
this.#bindings.set(name, binding);
|
this.#bindings.set(name, binding);
|
||||||
|
|
||||||
const expression = pageBindingInitString('exposedFun', name);
|
const expression = pageBindingInitString('exposedFun', name);
|
||||||
await this.#client.send('Runtime.addBinding', {name: name});
|
await this.#client.send('Runtime.addBinding', {name});
|
||||||
await this.#client.send('Page.addScriptToEvaluateOnNewDocument', {
|
const {identifier} = await this.#client.send(
|
||||||
source: expression,
|
'Page.addScriptToEvaluateOnNewDocument',
|
||||||
});
|
{
|
||||||
|
source: expression,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
this.#exposedFunctions.set(name, identifier);
|
||||||
|
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
this.frames().map(frame => {
|
this.frames().map(frame => {
|
||||||
return frame.evaluate(expression).catch(debugError);
|
return frame.evaluate(expression).catch(debugError);
|
||||||
@ -716,6 +723,33 @@ export class CDPPage extends Page {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override async removeExposedFunction(name: string): Promise<void> {
|
||||||
|
const exposedFun = this.#exposedFunctions.get(name);
|
||||||
|
if (!exposedFun) {
|
||||||
|
throw new Error(
|
||||||
|
`Failed to remove page binding with name ${name}: window['${name}'] does not exists!`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.#client.send('Runtime.removeBinding', {name});
|
||||||
|
await this.removeScriptToEvaluateOnNewDocument(exposedFun);
|
||||||
|
|
||||||
|
await Promise.all(
|
||||||
|
this.frames().map(frame => {
|
||||||
|
return frame
|
||||||
|
.evaluate(name => {
|
||||||
|
// Removes the dangling Puppeteer binding wrapper.
|
||||||
|
// @ts-expect-error: In a different context.
|
||||||
|
globalThis[name] = undefined;
|
||||||
|
}, name)
|
||||||
|
.catch(debugError);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
this.#exposedFunctions.delete(name);
|
||||||
|
this.#bindings.delete(name);
|
||||||
|
}
|
||||||
|
|
||||||
override async authenticate(credentials: Credentials): Promise<void> {
|
override async authenticate(credentials: Credentials): Promise<void> {
|
||||||
return this.#frameManager.networkManager.authenticate(credentials);
|
return this.#frameManager.networkManager.authenticate(credentials);
|
||||||
}
|
}
|
||||||
|
@ -2039,6 +2039,12 @@
|
|||||||
"parameters": ["cdp", "firefox"],
|
"parameters": ["cdp", "firefox"],
|
||||||
"expectations": ["FAIL"]
|
"expectations": ["FAIL"]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"testIdPattern": "[page.spec] Page Page.removeExposedFunction should work",
|
||||||
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
|
"parameters": ["cdp", "firefox"],
|
||||||
|
"expectations": ["FAIL"]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"testIdPattern": "[page.spec] Page Page.select should work when re-defining top-level Event class",
|
"testIdPattern": "[page.spec] Page Page.select should work when re-defining top-level Event class",
|
||||||
"platforms": ["darwin", "linux", "win32"],
|
"platforms": ["darwin", "linux", "win32"],
|
||||||
|
@ -1331,6 +1331,31 @@ describe('Page', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Page.removeExposedFunction', function () {
|
||||||
|
it('should work', async () => {
|
||||||
|
const {page} = getTestState();
|
||||||
|
|
||||||
|
await page.exposeFunction('compute', function (a: number, b: number) {
|
||||||
|
return a * b;
|
||||||
|
});
|
||||||
|
const result = await page.evaluate(async function () {
|
||||||
|
return await (globalThis as any).compute(9, 4);
|
||||||
|
});
|
||||||
|
expect(result).toBe(36);
|
||||||
|
await page.removeExposedFunction('compute');
|
||||||
|
|
||||||
|
let error: Error | null = null;
|
||||||
|
await page
|
||||||
|
.evaluate(async function () {
|
||||||
|
return (globalThis as any).compute(9, 4);
|
||||||
|
})
|
||||||
|
.catch(_error => {
|
||||||
|
return (error = _error);
|
||||||
|
});
|
||||||
|
expect(error).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('Page.Events.PageError', function () {
|
describe('Page.Events.PageError', function () {
|
||||||
it('should fire', async () => {
|
it('should fire', async () => {
|
||||||
const {page, server} = getTestState();
|
const {page, server} = getTestState();
|
||||||
|
Loading…
Reference in New Issue
Block a user