diff --git a/README.md b/README.md index 823596c1..39b426db 100755 --- a/README.md +++ b/README.md @@ -419,7 +419,7 @@ Android-specific methods can be called using the `InAppWebViewController.android * `static clearClientCertPreferences`: Clears the client certificate preferences stored in response to proceeding/cancelling client cert requests. * `static getSafeBrowsingPrivacyPolicyUrl`: Returns a URL pointing to the privacy policy for Safe Browsing reporting. This value will never be `null`. * `static setSafeBrowsingWhitelist({@required List hosts})`: Sets the list of hosts (domain names/IP addresses) that are exempt from SafeBrowsing checks. The list is global for all the WebViews. -* `static getCurrentWebViewPackage()`: Gets the current Android WebView package info. +* `static getCurrentWebViewPackage`: Gets the current Android WebView package info. ##### `InAppWebViewController` iOS-specific methods @@ -596,7 +596,7 @@ Event names that starts with `android` or `ios` are events platform-specific. * `onUpdateVisitedHistory`: Event fired when the host application updates its visited links database. This event is also fired when the navigation state of the InAppWebView changes, for example through the usage of the javascript **[History API](https://developer.mozilla.org/en-US/docs/Web/API/History_API)** functions. * `onLoadResource`: Event fired when the InAppWebView loads a resource (to use this event, the `useOnLoadResource` option must be `true`). * `onScrollChanged`: Event fired when the InAppWebView scrolls. -* `onDownloadStart`: Event fired when InAppWebView recognizes and starts a downloadable file (to use this event, the `useOnDownloadStart` option must be `true`). +* `onDownloadStart`: Event fired when InAppWebView recognizes a downloadable file (to use this event, the `useOnDownloadStart` option must be `true`). To download the file, you can use the [flutter_downloader](https://pub.dev/packages/flutter_downloader) plugin. * `onLoadResourceCustomScheme`: Event fired when the InAppWebView finds the `custom-scheme` while loading a resource. Here you can handle the url request and return a CustomSchemeResponse to load a specific resource encoded to `base64`. * `onCreateWindow`: Event fired when the InAppWebView requests the host application to create a new window, for example when trying to open a link with `target="_blank"` or when `window.open()` is called by JavaScript side. * `onJsAlert`: Event fired when javascript calls the `alert()` method to display an alert dialog. diff --git a/example/.flutter-plugins-dependencies b/example/.flutter-plugins-dependencies index cc2305d4..09e9752d 100755 --- a/example/.flutter-plugins-dependencies +++ b/example/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"e2e","path":"/Users/lorenzopichilli/flutter/.pub-cache/hosted/pub.dartlang.org/e2e-0.2.4+4/","dependencies":[]},{"name":"flutter_inappwebview","path":"/Users/lorenzopichilli/Desktop/flutter_inappwebview/","dependencies":[]},{"name":"permission_handler","path":"/Users/lorenzopichilli/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-5.0.0+hotfix.6/","dependencies":[]}],"android":[{"name":"e2e","path":"/Users/lorenzopichilli/flutter/.pub-cache/hosted/pub.dartlang.org/e2e-0.2.4+4/","dependencies":[]},{"name":"flutter_inappwebview","path":"/Users/lorenzopichilli/Desktop/flutter_inappwebview/","dependencies":[]},{"name":"permission_handler","path":"/Users/lorenzopichilli/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-5.0.0+hotfix.6/","dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"e2e","dependencies":[]},{"name":"flutter_inappwebview","dependencies":[]},{"name":"permission_handler","dependencies":[]}],"date_created":"2020-05-29 00:17:33.621880","version":"1.17.1"} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"e2e","path":"/Users/lorenzopichilli/flutter/.pub-cache/hosted/pub.dartlang.org/e2e-0.2.4+4/","dependencies":[]},{"name":"flutter_inappwebview","path":"/Users/lorenzopichilli/Desktop/flutter_inappwebview/","dependencies":[]},{"name":"permission_handler","path":"/Users/lorenzopichilli/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-5.0.0+hotfix.6/","dependencies":[]}],"android":[{"name":"e2e","path":"/Users/lorenzopichilli/flutter/.pub-cache/hosted/pub.dartlang.org/e2e-0.2.4+4/","dependencies":[]},{"name":"flutter_inappwebview","path":"/Users/lorenzopichilli/Desktop/flutter_inappwebview/","dependencies":[]},{"name":"permission_handler","path":"/Users/lorenzopichilli/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-5.0.0+hotfix.6/","dependencies":[]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"e2e","dependencies":[]},{"name":"flutter_inappwebview","dependencies":[]},{"name":"permission_handler","dependencies":[]}],"date_created":"2020-05-29 10:25:22.515235","version":"1.17.1"} \ No newline at end of file diff --git a/example/lib/in_app_webiew_example.screen.dart b/example/lib/in_app_webiew_example.screen.dart index 46bf16f5..7c4f6c2e 100755 --- a/example/lib/in_app_webiew_example.screen.dart +++ b/example/lib/in_app_webiew_example.screen.dart @@ -1,4 +1,5 @@ import 'dart:io'; +import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; @@ -73,13 +74,17 @@ class _InAppWebViewExampleScreenState extends State { BoxDecoration(border: Border.all(color: Colors.blueAccent)), child: InAppWebView( contextMenu: contextMenu, - initialUrl: "https://github.com/flutter", - // initialFile: "assets/index.html", + // initialUrl: "https://github.com/flutter", + initialFile: "assets/index.html", initialHeaders: {}, initialOptions: InAppWebViewGroupOptions( - crossPlatform: InAppWebViewOptions( - debuggingEnabled: true - ), + crossPlatform: InAppWebViewOptions( + debuggingEnabled: true, + useShouldOverrideUrlLoading: true + ), + android: AndroidInAppWebViewOptions( + supportMultipleWindows: true + ) ), onWebViewCreated: (InAppWebViewController controller) { webView = controller; @@ -91,6 +96,13 @@ class _InAppWebViewExampleScreenState extends State { this.url = url; }); }, + shouldOverrideUrlLoading: (controller, shouldOverrideUrlLoadingRequest) async { + print("shouldOverrideUrlLoading"); + return ShouldOverrideUrlLoadingAction.ALLOW; + }, + onCreateWindow: (controller, onCreateWindowRequest) { + print("onCreateWindow"); + }, onLoadStop: (InAppWebViewController controller, String url) async { print("onLoadStop $url"); setState(() { diff --git a/example/test_driver/in_app_webview_javascript_handler_test.dart b/example/test_driver/in_app_webview_javascript_handler_test.dart index 0887b037..1fac7e69 100755 --- a/example/test_driver/in_app_webview_javascript_handler_test.dart +++ b/example/test_driver/in_app_webview_javascript_handler_test.dart @@ -54,7 +54,7 @@ class InAppWebViewJavaScriptHandlerTestState extends WidgetTestState { controller.addJavaScriptHandler(handlerName:'handlerFoo', callback: (args) { appBarTitle = (args.length == 0).toString(); - return new Foo(bar: 'bar_value', baz: 'baz_value'); + return Foo(bar: 'bar_value', baz: 'baz_value'); }); controller.addJavaScriptHandler(handlerName: 'handlerFooWithArgs', callback: (args) { diff --git a/example/test_driver/in_app_webview_on_load_resource_custom_scheme_test.dart b/example/test_driver/in_app_webview_on_load_resource_custom_scheme_test.dart index de2c4177..dd48200a 100755 --- a/example/test_driver/in_app_webview_on_load_resource_custom_scheme_test.dart +++ b/example/test_driver/in_app_webview_on_load_resource_custom_scheme_test.dart @@ -54,7 +54,7 @@ class InAppWebViewOnLoadResourceCustomSchemeTestState extends WidgetTestState { onLoadResourceCustomScheme: (InAppWebViewController controller, String scheme, String url) async { if (scheme == "my-special-custom-scheme") { var bytes = await rootBundle.load("test_assets/" + url.replaceFirst("my-special-custom-scheme://", "", 0)); - var response = new CustomSchemeResponse(data: bytes.buffer.asUint8List(), contentType: "image/svg+xml", contentEnconding: "utf-8"); + var response = CustomSchemeResponse(data: bytes.buffer.asUint8List(), contentType: "image/svg+xml", contentEnconding: "utf-8"); return response; } return null; diff --git a/lib/src/webview.dart b/lib/src/webview.dart index 6f52f5a2..559cdfe5 100644 --- a/lib/src/webview.dart +++ b/lib/src/webview.dart @@ -93,7 +93,8 @@ abstract class WebView { final void Function(InAppWebViewController controller, int x, int y) onScrollChanged; - ///Event fired when [WebView] recognizes and starts a downloadable file. + ///Event fired when [WebView] recognizes a downloadable file. + ///To download the file, you can use the [flutter_downloader](https://pub.dev/packages/flutter_downloader) plugin. /// ///[url] represents the url of the file. /// diff --git a/nodejs_server_test_auth_basic_and_ssl/package-lock.json b/nodejs_server_test_auth_basic_and_ssl/package-lock.json index 2f15a4c5..63329d22 100755 --- a/nodejs_server_test_auth_basic_and_ssl/package-lock.json +++ b/nodejs_server_test_auth_basic_and_ssl/package-lock.json @@ -210,9 +210,9 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "media-typer": { "version": "0.3.0", @@ -235,16 +235,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "requires": { - "mime-db": "1.40.0" + "mime-db": "1.44.0" } }, "ms": { @@ -281,12 +281,12 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "ipaddr.js": "1.9.1" } }, "qs": {