Worker
Worker 类代表一个 WebWorker。在 page 对象上会触发 worker 事件以表示创建了一个 worker。当 worker 被销毁时,会在 worker 对象上触发 close 事件。
page.on('worker', worker => {
console.log('Worker created: ' + worker.url());
worker.on('close', worker => console.log('Worker destroyed: ' + worker.url()));
});
console.log('Current workers:');
for (const worker of page.workers())
console.log(' ' + worker.url());
方法
evaluate
v1.9 之前添加返回 pageFunction 的返回值。
如果传给 worker.evaluate() 的函数返回一个 Promise,那么 worker.evaluate() 将会等待该 promise 解析并返回其值。
如果传给 worker.evaluate() 的函数返回一个非 可序列化 (Serializable) 的值,那么 worker.evaluate() 将返回 undefined。Playwright 还支持传输一些无法通过 JSON 序列化的附加值:-0、NaN、Infinity、-Infinity。
用法
await worker.evaluate(pageFunction);
await worker.evaluate(pageFunction, arg);
参数
-
pageFunctionfunction | string#在 worker 上下文中执行的函数。
-
argEvaluationArgument (可选)#传递给 pageFunction 的可选参数。
返回
evaluateHandle
v1.9 之前添加返回 pageFunction 的返回值作为 JSHandle。
worker.evaluate() 和 worker.evaluateHandle() 唯一的区别在于 worker.evaluateHandle() 返回的是 JSHandle。
如果传给 worker.evaluateHandle() 的函数返回一个 Promise,那么 worker.evaluateHandle() 将会等待该 promise 解析并返回其值。
用法
await worker.evaluateHandle(pageFunction);
await worker.evaluateHandle(pageFunction, arg);
参数
-
pageFunctionfunction | string#在 worker 上下文中执行的函数。
-
argEvaluationArgument (可选)#传递给 pageFunction 的可选参数。
返回
url
v1.9 之前添加用法
worker.url();
返回
waitForEvent
Added in: v1.57等待事件触发并将值传递给谓词函数。在谓词返回真值时返回。如果事件在页面关闭前触发,将抛出错误。返回事件数据值。
用法
// Start waiting for download before clicking. Note no await.
const consolePromise = worker.waitForEvent('console');
await worker.evaluate('console.log(42)');
const consoleMessage = await consolePromise;
参数
-
事件名称,通常传递给
*.on(event)的相同名称。 -
optionsOrPredicatefunction | Object (可选)#-
predicatefunction接收事件数据,并在等待应该解决时解析为真值。
-
timeoutnumber (可选)等待的最长毫秒数。默认为
0- 不超时。默认值可以通过配置中的actionTimeout选项更改,或者使用 browserContext.setDefaultTimeout() 或 page.setDefaultTimeout() 方法更改。
一个接收事件的谓词或一个选项对象。可选。
-
-
optionsObject (可选)
返回
Events
on('close')
v1.9 之前添加当此专用 WebWorker 被终止时触发。
用法
worker.on('close', data => {});
事件数据
on('console')
Added in: v1.57当 worker 中的 JavaScript 调用其中一个控制台 API 方法(例如 console.log 或 console.dir)时触发。
用法
worker.on('console', data => {});
事件数据