setOnConsoleMessage method
Future<void>
setOnConsoleMessage(
- void onConsoleMessage(
- JavaScriptConsoleMessage consoleMessage
Sets a callback that notifies the host application of any log messages written to the JavaScript console.
Because the iOS WKWebView doesn't provide a built-in way to access the
console, setting this callback will inject a custom WKUserScript
which
overrides the JavaScript console.debug
, console.error
, console.info
,
console.log
and console.warn
methods and forwards the console message
via a JavaScriptChannel
to the host application.
Implementation
@override
Future<void> setOnConsoleMessage(
void Function(JavaScriptConsoleMessage consoleMessage) onConsoleMessage,
) {
_onConsoleMessageCallback = onConsoleMessage;
final JavaScriptChannelParams channelParams = WebKitJavaScriptChannelParams(
name: 'fltConsoleMessage',
webKitProxy: _webKitParams.webKitProxy,
onMessageReceived: (JavaScriptMessage message) {
if (_onConsoleMessageCallback == null) {
return;
}
final Map<String, dynamic> consoleLog =
jsonDecode(message.message) as Map<String, dynamic>;
JavaScriptLogLevel level;
switch (consoleLog['level']) {
case 'error':
level = JavaScriptLogLevel.error;
case 'warning':
level = JavaScriptLogLevel.warning;
case 'debug':
level = JavaScriptLogLevel.debug;
case 'info':
level = JavaScriptLogLevel.info;
case 'log':
default:
level = JavaScriptLogLevel.log;
break;
}
_onConsoleMessageCallback!(
JavaScriptConsoleMessage(
level: level,
message: consoleLog['message']! as String,
),
);
});
addJavaScriptChannel(channelParams);
return _injectConsoleOverride();
}