addJavaScriptChannel method

  1. @override
Future<void> addJavaScriptChannel(
  1. JavaScriptChannelParams javaScriptChannelParams
)

Adds a new JavaScript channel to the set of enabled channels.

Implementation

@override
Future<void> addJavaScriptChannel(
  JavaScriptChannelParams javaScriptChannelParams,
) {
  final String channelName = javaScriptChannelParams.name;
  if (_javaScriptChannelParams.containsKey(channelName)) {
    throw ArgumentError(
      'A JavaScriptChannel with name `$channelName` already exists.',
    );
  }

  final WebKitJavaScriptChannelParams webKitParams =
      javaScriptChannelParams is WebKitJavaScriptChannelParams
          ? javaScriptChannelParams
          : WebKitJavaScriptChannelParams.fromJavaScriptChannelParams(
              javaScriptChannelParams,
            );

  _javaScriptChannelParams[webKitParams.name] = webKitParams;

  final String wrapperSource =
      'window.${webKitParams.name} = webkit.messageHandlers.${webKitParams.name};';
  final WKUserScript wrapperScript = WKUserScript(
    wrapperSource,
    WKUserScriptInjectionTime.atDocumentStart,
    isMainFrameOnly: false,
  );
  _webView.configuration.userContentController.addUserScript(wrapperScript);
  return _webView.configuration.userContentController.addScriptMessageHandler(
    webKitParams._messageHandler,
    webKitParams.name,
  );
}