evaluate<T> method
If the function passed to the executionContext.evaluate
returns a Promise
,
then executionContext.evaluate
would wait for the promise to resolve and
return its value.
If the function passed to the executionContext.evaluate
returns a
non-Serializable
value, then executionContext.evaluate
resolves to null
.
DevTools Protocol also supports transferring some additional values that
are not serializable by JSON
: -0
, NaN
, Infinity
, -Infinity
, and
bigint literals.
var executionContext = await page.mainFrame.executionContext;
var result = await executionContext.evaluate('() => Promise.resolve(8 * 7)');
print(result); // prints "56"
An expression can also be passed in instead of a function.
print(await executionContext.evaluate('1 + 2')); // prints "3"
Parameters:
pageFunction
: Function to be evaluated inexecutionContext
args
: Arguments to pass topageFunction
Returns Future which resolves to the return value of pageFunction
Implementation
Future<T> evaluate<T>(
@Language('js') String pageFunction, {
List<dynamic>? args,
}) async {
try {
var result = await _evaluateInternal<T>(
pageFunction,
args: args,
returnByValue: true,
);
return result;
} catch (error) {
if (error is ServerException &&
(error.message.contains('Object reference chain is too long') ||
error.message.contains("Object couldn't be returned by value"))) {
return null as T;
} else {
rethrow;
}
}
}