mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
fix(page): fallback to default in exposeFunction when using imported module (#6365)
This commit is contained in:
parent
b4ba9c803d
commit
44c9ec67c5
@ -1875,7 +1875,7 @@ await page.evaluateOnNewDocument(preloadFile);
|
|||||||
#### page.exposeFunction(name, puppeteerFunction)
|
#### page.exposeFunction(name, puppeteerFunction)
|
||||||
|
|
||||||
- `name` <[string]> Name of the function on the window object
|
- `name` <[string]> Name of the function on the window object
|
||||||
- `puppeteerFunction` <[function]> Callback function which will be called in Puppeteer's context.
|
- `puppeteerFunction` <[function]> Callback function which will be called in Puppeteer's context. Can also be a module with a default export.
|
||||||
- returns: <[Promise]>
|
- returns: <[Promise]>
|
||||||
|
|
||||||
The method adds a function called `name` on the page's `window` object.
|
The method adds a function called `name` on the page's `window` object.
|
||||||
|
@ -1364,13 +1364,25 @@ export class Page extends EventEmitter {
|
|||||||
*/
|
*/
|
||||||
async exposeFunction(
|
async exposeFunction(
|
||||||
name: string,
|
name: string,
|
||||||
puppeteerFunction: Function
|
puppeteerFunction: Function | { default: Function }
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
if (this._pageBindings.has(name))
|
if (this._pageBindings.has(name))
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Failed to add page binding with name ${name}: window['${name}'] already exists!`
|
`Failed to add page binding with name ${name}: window['${name}'] already exists!`
|
||||||
);
|
);
|
||||||
this._pageBindings.set(name, puppeteerFunction);
|
|
||||||
|
let exposedFunction: Function;
|
||||||
|
if (typeof puppeteerFunction === 'function') {
|
||||||
|
exposedFunction = puppeteerFunction;
|
||||||
|
} else if (typeof puppeteerFunction.default === 'function') {
|
||||||
|
exposedFunction = puppeteerFunction.default;
|
||||||
|
} else {
|
||||||
|
throw new Error(
|
||||||
|
`Failed to add page binding with name ${name}: ${puppeteerFunction} is not a function or a module with a default export.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._pageBindings.set(name, exposedFunction);
|
||||||
|
|
||||||
const expression = helper.pageBindingInitString('exposedFun', name);
|
const expression = helper.pageBindingInitString('exposedFun', name);
|
||||||
await this._client.send('Runtime.addBinding', { name: name });
|
await this._client.send('Runtime.addBinding', { name: name });
|
||||||
|
@ -1029,6 +1029,20 @@ describe('Page', function () {
|
|||||||
);
|
);
|
||||||
expect(result.x).toBe(7);
|
expect(result.x).toBe(7);
|
||||||
});
|
});
|
||||||
|
it('should fallback to default export when passed a module object', async () => {
|
||||||
|
const { page, server } = getTestState();
|
||||||
|
const moduleObject = {
|
||||||
|
default: function (a, b) {
|
||||||
|
return a * b;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
await page.goto(server.EMPTY_PAGE);
|
||||||
|
await page.exposeFunction('compute', moduleObject);
|
||||||
|
const result = await page.evaluate(async function () {
|
||||||
|
return await globalThis.compute(9, 4);
|
||||||
|
});
|
||||||
|
expect(result).toBe(36);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describeFailsFirefox('Page.Events.PageError', function () {
|
describeFailsFirefox('Page.Events.PageError', function () {
|
||||||
|
Loading…
Reference in New Issue
Block a user