Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] InAppWebView shouldOverrideUrlLoading is called on the initial load of the WebView, iOS only #863

Open
4 tasks done
rubenferreira97 opened this issue May 28, 2021 · 4 comments
Labels
bug Something isn't working

Comments

@rubenferreira97
Copy link

Environment

Technology Version
Flutter version 2.3.0-13.0.pre.191
Plugin version 5.3.2
Android version 30
iOS version 14.3
Xcode version 12.5

Device information: iPhone 12 Pro Max - iOS 14.3

Description

Expected behavior:
Quoting from the documentation (https://pub.dev/documentation/flutter_inappwebview/latest/flutter_inappwebview/HeadlessInAppWebView/shouldOverrideUrlLoading.html):

Give the host application a chance to take control when a URL is about to be loaded in the current WebView. This event is not called on the initial load of the WebView.

Current behavior:
shouldOverrideUrlLoading is called on iOS on initial load. In Android everything works as expected.

Steps to reproduce

  1. Set useShouldOverrideUrlLoading: true in initialOptions
  2. Implement shouldOverrideUrlLoading in InAppWebView
  3. Place a breakpoint or print something in shouldOverrideUrlLoading

Code:

InAppWebView(
            initialData: InAppWebViewInitialData(
                data: html,
                baseUrl: Uri.parse(Config.BASE_URL)),
            initialOptions: InAppWebViewGroupOptions(
              android: AndroidInAppWebViewOptions(
                useHybridComposition: true,
              ),
              crossPlatform: InAppWebViewOptions(
                  supportZoom: false,
                  disableHorizontalScroll: true,
                  useShouldOverrideUrlLoading: true,
                  horizontalScrollBarEnabled: false),
            ),
            onLoadStop: (controller, url) {
              controller.injectJavascriptFileFromAsset(
                  assetFilePath: 'assets/js/all.min.js');
            },
            shouldOverrideUrlLoading: (controller, navigationAction) async {
              print('Hi');
              //launch(navigationAction.request.url.toString());
              return NavigationActionPolicy.CANCEL;
            },
          );
@rubenferreira97 rubenferreira97 added the bug Something isn't working label May 28, 2021
@github-actions
Copy link

👋 @rubenferreira97

NOTE: This comment is auto-generated.

Are you sure you have already searched for the same problem?

Some people open new issues but they didn't search for something similar or for the same issue. Please, search for it using the GitHub issue search box or on the official inappwebview.dev website, or, also, using Google, StackOverflow, etc. before posting a new one. You may already find an answer to your problem!

If this is really a new issue, then thank you for raising it. I will investigate it and get back to you as soon as possible. Please, make sure you have given me as much context as possible! Also, if you didn't already, post a code example that can replicate this issue.

In the meantime, you can already search for some possible solutions online! Because this plugin uses native WebView, you can search online for the same issue adding android WebView [MY ERROR HERE] or ios WKWebView [MY ERROR HERE] keywords.

Following these steps can save you, me, and other people a lot of time, thanks!

@kaichii
Copy link

kaichii commented Jul 19, 2021

Environment

Technology Version
Flutter version 2.3.0-13.0.pre.191
Plugin version 5.3.2
Android version 30
iOS version 14.3
Xcode version 12.5
Device information: iPhone 12 Pro Max - iOS 14.3

Description

Expected behavior:
Quoting from the documentation (https://pub.dev/documentation/flutter_inappwebview/latest/flutter_inappwebview/HeadlessInAppWebView/shouldOverrideUrlLoading.html):

Give the host application a chance to take control when a URL is about to be loaded in the current WebView. This event is not called on the initial load of the WebView.

Current behavior:
shouldOverrideUrlLoading is called on iOS on initial load. In Android everything works as expected.

Steps to reproduce

  1. Set useShouldOverrideUrlLoading: true in initialOptions
  2. Implement shouldOverrideUrlLoading in InAppWebView
  3. Place a breakpoint or print something in shouldOverrideUrlLoading

Code:

InAppWebView(
            initialData: InAppWebViewInitialData(
                data: html,
                baseUrl: Uri.parse(Config.BASE_URL)),
            initialOptions: InAppWebViewGroupOptions(
              android: AndroidInAppWebViewOptions(
                useHybridComposition: true,
              ),
              crossPlatform: InAppWebViewOptions(
                  supportZoom: false,
                  disableHorizontalScroll: true,
                  useShouldOverrideUrlLoading: true,
                  horizontalScrollBarEnabled: false),
            ),
            onLoadStop: (controller, url) {
              controller.injectJavascriptFileFromAsset(
                  assetFilePath: 'assets/js/all.min.js');
            },
            shouldOverrideUrlLoading: (controller, navigationAction) async {
              print('Hi');
              //launch(navigationAction.request.url.toString());
              return NavigationActionPolicy.CANCEL;
            },
          );

Any solution?

@zoltanbalog
Copy link

@rubenferreira97 or @kaichii do you know any solution for this problem?

@kaichii
Copy link

kaichii commented Nov 30, 2021

@rubenferreira97 or @kaichii do you know any solution for this problem?

I add logic to handle "about:blank" url on ios platform.

WingCH added a commit to WingCH/whatsapp_web that referenced this issue Jan 21, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants