diff --git a/flutter_inappwebview/pubspec.yaml b/flutter_inappwebview/pubspec.yaml index ef480d4a4..a0f8668f8 100755 --- a/flutter_inappwebview/pubspec.yaml +++ b/flutter_inappwebview/pubspec.yaml @@ -19,8 +19,10 @@ dependencies: flutter: sdk: flutter flutter_inappwebview_platform_interface: ^1.0.10 - flutter_inappwebview_android: ^1.0.12 - flutter_inappwebview_ios: ^1.0.13 + flutter_inappwebview_android: + path: ../flutter_inappwebview_android + flutter_inappwebview_ios: + path: ../flutter_inappwebview_ios flutter_inappwebview_macos: ^1.0.11 flutter_inappwebview_web: ^1.0.8 diff --git a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/WebViewChannelDelegate.java b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/WebViewChannelDelegate.java index 5f87b93c0..58cc1de2c 100644 --- a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/WebViewChannelDelegate.java +++ b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/WebViewChannelDelegate.java @@ -635,16 +635,12 @@ public void onReceiveValue(Boolean value) { if (webView != null) { Map webMessageListenerMap = (Map) call.argument("webMessageListener"); WebMessageListener webMessageListener = WebMessageListener.fromMap(webView, webView.getPlugin().messenger, webMessageListenerMap); - if (webView instanceof InAppWebView && WebViewFeature.isFeatureSupported(WebViewFeature.WEB_MESSAGE_LISTENER)) { try { webView.addWebMessageListener(webMessageListener); result.success(true); } catch (Exception e) { result.error(LOG_TAG, e.getMessage(), null); } - } else { - result.success(true); - } } else { result.success(true); } diff --git a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/in_app_webview/InAppWebView.java b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/in_app_webview/InAppWebView.java index bde634bb7..8c7e7b99c 100755 --- a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/in_app_webview/InAppWebView.java +++ b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/in_app_webview/InAppWebView.java @@ -1895,6 +1895,8 @@ public void addWebMessageListener(@NonNull WebMessageListener webMessageListener if (WebViewFeature.isFeatureSupported(WebViewFeature.WEB_MESSAGE_LISTENER)) { WebViewCompat.addWebMessageListener(this, webMessageListener.jsObjectName, webMessageListener.allowedOriginRules, webMessageListener.listener); webMessageListeners.add(webMessageListener); + } else { + addJavascriptInterface(webMessageListener, webMessageListener.jsObjectName); } } diff --git a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/web_message/WebMessageListener.java b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/web_message/WebMessageListener.java index fe7326f70..f9b97d7ba 100644 --- a/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/web_message/WebMessageListener.java +++ b/flutter_inappwebview_android/android/src/main/java/com/pichillilorenzo/flutter_inappwebview_android/webview/web_message/WebMessageListener.java @@ -1,7 +1,10 @@ package com.pichillilorenzo.flutter_inappwebview_android.webview.web_message; import android.net.Uri; +import android.os.Handler; +import android.os.Looper; import android.text.TextUtils; +import android.webkit.JavascriptInterface; import android.webkit.WebView; import androidx.annotation.NonNull; @@ -21,6 +24,7 @@ import com.pichillilorenzo.flutter_inappwebview_android.webview.in_app_webview.InAppWebView; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -171,6 +175,23 @@ public void assertOriginRulesValid() throws Exception { } } + // Suppressing unused warning as this is invoked from JavaScript. + @SuppressWarnings("unused") + @JavascriptInterface + public void postMessage(@NonNull final String message) { + System.out.println("postMessage " + message); + Map map = new HashMap<>(); + map.put("data", message); + map.put("type", WebMessageCompat.TYPE_STRING); + WebMessageCompatExt webMessage = WebMessageCompatExt.fromMap(map); + if (channelDelegate != null) { + Handler mainHandler = new Handler(Looper.getMainLooper()); + mainHandler.post(() -> channelDelegate.onPostMessage(webMessage, + null, + false)); + } + } + public void postMessageForInAppWebView(WebMessageCompatExt message, @NonNull MethodChannel.Result result) { if (replyProxy != null && WebViewFeature.isFeatureSupported(WebViewFeature.WEB_MESSAGE_LISTENER)) { Object data = message.getData(); diff --git a/flutter_inappwebview_ios/ios/Classes/InAppWebView/InAppWebView.swift b/flutter_inappwebview_ios/ios/Classes/InAppWebView/InAppWebView.swift index 25dee18da..ff9bc1ddd 100755 --- a/flutter_inappwebview_ios/ios/Classes/InAppWebView/InAppWebView.swift +++ b/flutter_inappwebview_ios/ios/Classes/InAppWebView/InAppWebView.swift @@ -1428,8 +1428,9 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, completionHandler(nil) } } - - public override func evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Void)? = nil) { + +#if compiler(>=6.0) + public override func evaluateJavaScript(_ javaScriptString: String, completionHandler: (@MainActor @Sendable (Any?, (any Error)?) -> Void)? = nil) { if let applePayAPIEnabled = settings?.applePayAPIEnabled, applePayAPIEnabled { if let completionHandler = completionHandler { completionHandler(nil, nil) @@ -1438,6 +1439,16 @@ public class InAppWebView: WKWebView, UIScrollViewDelegate, WKUIDelegate, } super.evaluateJavaScript(javaScriptString, completionHandler: completionHandler) } +#else + public override func evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Void)? = nil) { if let applePayAPIEnabled = settings?.applePayAPIEnabled, applePayAPIEnabled { + if let completionHandler = completionHandler { + completionHandler(nil, nil) + } + return + } + super.evaluateJavaScript(javaScriptString, completionHandler: completionHandler) + } +#endif @available(iOS 14.0, *) public func evaluateJavaScript(_ javaScript: String, frame: WKFrameInfo? = nil, contentWorld: WKContentWorld, completionHandler: ((Result) -> Void)? = nil) { diff --git a/flutter_inappwebview_ios/ios/flutter_inappwebview_ios.podspec b/flutter_inappwebview_ios/ios/flutter_inappwebview_ios.podspec index a08fa7fbb..77de9f91e 100755 --- a/flutter_inappwebview_ios/ios/flutter_inappwebview_ios.podspec +++ b/flutter_inappwebview_ios/ios/flutter_inappwebview_ios.podspec @@ -30,7 +30,7 @@ A new Flutter plugin. s.swift_version = '5.0' s.platforms = { :ios => '11.0' } - s.dependency 'OrderedSet', '~>5.0' + s.dependency 'OrderedSet', '~>6.0.3' s.default_subspec = 'Core'