48 lines
1.7 KiB
Dart
48 lines
1.7 KiB
Dart
/// A message that was sent by JavaScript code running in a [WebView].
|
|
class JavascriptMessage {
|
|
/// Constructs a JavaScript message object.
|
|
///
|
|
/// The `message` parameter must not be null.
|
|
const JavascriptMessage(this.message, this.callbackId, this.frameId);
|
|
|
|
/// The contents of the message that was sent by the JavaScript code.
|
|
final String message;
|
|
|
|
// The callbackId of the JavaScript code
|
|
final String callbackId;
|
|
// the frameId of the webview frame
|
|
final String frameId;
|
|
}
|
|
|
|
final RegExp _validChannelNames = RegExp('^[a-zA-Z_][a-zA-Z0-9.]*\$');
|
|
|
|
/// A named channel for receiving messaged from JavaScript code running inside a web view.
|
|
class JavascriptChannel {
|
|
/// Constructs a Javascript channel.
|
|
///
|
|
/// The parameters `name` and `onMessageReceived` must not be null.
|
|
JavascriptChannel({
|
|
required this.name,
|
|
required this.onMessageReceived,
|
|
}) : assert(_validChannelNames.hasMatch(name));
|
|
|
|
/// The channel's name.
|
|
///
|
|
/// Passing this channel object as part of a [WebView.javascriptChannels] adds a channel object to
|
|
/// the Javascript window object's property named `name`.
|
|
///
|
|
/// The name must start with a letter or underscore(_), followed by any combination of those
|
|
/// characters plus digits.
|
|
///
|
|
/// Note that any JavaScript existing `window` property with this name will be overriden.
|
|
///
|
|
/// See also [WebView.javascriptChannels] for more details on the channel registration mechanism.
|
|
final String name;
|
|
|
|
/// A callback that's invoked when a message is received through the channel.
|
|
final JavascriptMessageHandler onMessageReceived;
|
|
}
|
|
|
|
/// Callback type for handling messages sent from Javascript running in a web view.
|
|
typedef JavascriptMessageHandler = void Function(JavascriptMessage message);
|