diff --git a/flutter_inappwebview_web/lib/web/headless_in_app_web_view_web_element.dart b/flutter_inappwebview_web/lib/web/headless_in_app_web_view_web_element.dart index a02c66062..6581eda78 100644 --- a/flutter_inappwebview_web/lib/web/headless_in_app_web_view_web_element.dart +++ b/flutter_inappwebview_web/lib/web/headless_in_app_web_view_web_element.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:ui'; import 'package:flutter/services.dart'; +import 'package:web/web.dart'; import 'headless_inappwebview_manager.dart'; import 'in_app_web_view_web_element.dart'; @@ -52,8 +53,8 @@ class HeadlessInAppWebViewWebElement extends ChannelController { } void setSize(Size size) { - webView?.iframeContainer.style.width = size.width.toString() + "px"; - webView?.iframeContainer.style.height = size.height.toString() + "px"; + webView?.iframeContainer.style.setProperty('width', size.width.toString() + "px"); + webView?.iframeContainer.style.setProperty('height', size.height.toString() + "px"); } InAppWebViewWebElement? disposeAndGetFlutterWebView() { diff --git a/flutter_inappwebview_web/lib/web/headless_inappwebview_manager.dart b/flutter_inappwebview_web/lib/web/headless_inappwebview_manager.dart index 8a4dc5c94..f1b0090d7 100644 --- a/flutter_inappwebview_web/lib/web/headless_inappwebview_manager.dart +++ b/flutter_inappwebview_web/lib/web/headless_inappwebview_manager.dart @@ -1,10 +1,11 @@ -import 'dart:html'; - import 'package:flutter/services.dart'; import 'package:flutter_inappwebview_platform_interface/flutter_inappwebview_platform_interface.dart'; import 'web_platform_manager.dart'; import 'in_app_web_view_web_element.dart'; import 'headless_in_app_web_view_web_element.dart'; +import 'package:web/web.dart'; +import 'package:web/helpers.dart'; +import 'dart:js_interop'; class HeadlessInAppWebViewManager { static final Map webViews = {}; @@ -77,7 +78,7 @@ class HeadlessInAppWebViewManager { webView.initialFile = params["initialFile"]; webView.initialData = InAppWebViewInitialData.fromMap( params["initialData"]?.cast()); - document.body?.append(webView.iframeContainer); + document.body?.append(webView.iframeContainer as JSAny); webView.prepare(); } } diff --git a/flutter_inappwebview_web/lib/web/in_app_web_view_web_element.dart b/flutter_inappwebview_web/lib/web/in_app_web_view_web_element.dart index 22fd79f8f..b2695581f 100644 --- a/flutter_inappwebview_web/lib/web/in_app_web_view_web_element.dart +++ b/flutter_inappwebview_web/lib/web/in_app_web_view_web_element.dart @@ -3,8 +3,10 @@ import 'dart:typed_data'; import 'dart:ui'; import 'package:flutter/services.dart'; import 'package:flutter_inappwebview_platform_interface/flutter_inappwebview_platform_interface.dart'; -import 'dart:html'; import 'dart:js' as js; +import 'dart:js_interop'; +import 'package:web/helpers.dart'; +import 'package:web/web.dart'; import 'dart:developer'; import 'headless_inappwebview_manager.dart'; @@ -13,8 +15,8 @@ import 'web_platform_manager.dart'; class InAppWebViewWebElement implements Disposable { late dynamic _viewId; late BinaryMessenger _messenger; - late DivElement iframeContainer; - late IFrameElement iframe; + late HTMLDivElement iframeContainer; + late HTMLIFrameElement iframe; late MethodChannel? _channel; InAppWebViewSettings? initialSettings; URLRequest? initialUrlRequest; @@ -30,17 +32,17 @@ class InAppWebViewWebElement implements Disposable { {required dynamic viewId, required BinaryMessenger messenger}) { this._viewId = viewId; this._messenger = messenger; - iframeContainer = DivElement() + iframeContainer = createElementTag('div') as HTMLDivElement ..id = 'flutter_inappwebview-$_viewId-container' ..style.height = '100%' ..style.width = '100%' ..style.border = 'none'; - iframe = IFrameElement() + iframe = createIFrameElement() ..id = 'flutter_inappwebview-$_viewId' ..style.height = '100%' ..style.width = '100%' ..style.border = 'none'; - iframeContainer.append(iframe); + iframeContainer.append(iframe as JSAny); _channel = MethodChannel( 'com.pichillilorenzo/flutter_inappwebview_$_viewId', @@ -193,7 +195,7 @@ class InAppWebViewWebElement implements Disposable { if (webView != null) { webView.iframe.id = iframe.id; iframe.remove(); - iframeContainer.append(webView.iframe); + iframeContainer.append(webView.iframe as JSAny); iframe = webView.iframe; initialSettings = webView.initialSettings; @@ -261,7 +263,7 @@ class InAppWebViewWebElement implements Disposable { } } - Future _makeRequest(URLRequest urlRequest, + Future _makeRequest(URLRequest urlRequest, {bool? withCredentials, String? responseType, String? mimeType, @@ -276,11 +278,10 @@ class InAppWebViewWebElement implements Disposable { onProgress: onProgress); } - String _convertHttpResponseToData(HttpRequest httpRequest) { + String _convertHttpResponseToData(XMLHttpRequest httpRequest) { final String contentType = httpRequest.getResponseHeader('content-type') ?? 'text/html'; - return 'data:$contentType,' + - Uri.encodeComponent(httpRequest.responseText ?? ''); + return 'data:$contentType,' + Uri.encodeComponent(httpRequest.responseText); } String getIFrameId() { @@ -437,12 +438,10 @@ class InAppWebViewWebElement implements Disposable { Set getSandbox() { var sandbox = iframe.sandbox; Set values = Set(); - if (sandbox != null) { - for (int i = 0; i < sandbox.length; i++) { - var token = Sandbox.fromNativeValue(sandbox.item(i)); - if (token != null) { - values.add(token); - } + for (int i = 0; i < sandbox.length; i++) { + var token = Sandbox.fromNativeValue(sandbox.item(i)); + if (token != null) { + values.add(token); } } return values.isEmpty ? Set.from(Sandbox.values) : values; @@ -466,19 +465,19 @@ class InAppWebViewWebElement implements Disposable { } if (settings!.iframeAllow != newSettings.iframeAllow) { - iframe.allow = newSettings.iframeAllow; + iframe.allow = newSettings.iframeAllow ?? ''; } if (settings!.iframeAllowFullscreen != newSettings.iframeAllowFullscreen) { - iframe.allowFullscreen = newSettings.iframeAllowFullscreen; + iframe.allowFullscreen = newSettings.iframeAllowFullscreen ?? true; } if (settings!.iframeReferrerPolicy != newSettings.iframeReferrerPolicy) { - iframe.referrerPolicy = newSettings.iframeReferrerPolicy?.toNativeValue(); + iframe.referrerPolicy = newSettings.iframeReferrerPolicy?.toNativeValue() ?? ''; } if (settings!.iframeName != newSettings.iframeName) { - iframe.name = newSettings.iframeName; + iframe.name = newSettings.iframeName ?? ''; } if (settings!.iframeCsp != newSettings.iframeCsp) { - iframe.csp = newSettings.iframeCsp; + iframe.csp = newSettings.iframeCsp ?? ''; } if (settings!.iframeSandbox != newSettings.iframeSandbox) { diff --git a/flutter_inappwebview_web/lib/web/shims/platform_view_registry_dart_ui.dart b/flutter_inappwebview_web/lib/web/shims/platform_view_registry_dart_ui.dart index 1aaddc014..7440810d9 100644 --- a/flutter_inappwebview_web/lib/web/shims/platform_view_registry_dart_ui.dart +++ b/flutter_inappwebview_web/lib/web/shims/platform_view_registry_dart_ui.dart @@ -1,9 +1,9 @@ -import 'dart:html' as html; import 'dart:ui' as ui; +import 'package:web/web.dart'; class platformViewRegistry { static bool registerViewFactory( - String viewTypeId, html.Element Function(int viewId) viewFactory) { + String viewTypeId, Element Function(int viewId) viewFactory) { // ignore: undefined_prefixed_name return ui.platformViewRegistry.registerViewFactory(viewTypeId, viewFactory); } diff --git a/flutter_inappwebview_web/pubspec.yaml b/flutter_inappwebview_web/pubspec.yaml index 893cd69c3..187a55378 100644 --- a/flutter_inappwebview_web/pubspec.yaml +++ b/flutter_inappwebview_web/pubspec.yaml @@ -22,6 +22,7 @@ dependencies: sdk: flutter js: ^0.6.4 flutter_inappwebview_platform_interface: ^1.0.6 + web: ^0.4.0 dev_dependencies: flutter_test: