diff --git a/ios/Classes/FlutterWebviewPlugin.m b/ios/Classes/FlutterWebviewPlugin.m index a2d121d2..7b98f80f 100644 --- a/ios/Classes/FlutterWebviewPlugin.m +++ b/ios/Classes/FlutterWebviewPlugin.m @@ -62,9 +62,8 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { [self stopLoading]; result(nil); } else if ([@"cleanCookies" isEqualToString:call.method]) { - [[NSURLSession sharedSession] resetWithCompletionHandler:^{ - result(nil); - }]; + [self cleanCookies]; + result(nil); } else if ([@"back" isEqualToString:call.method]) { [self back]; result(nil); @@ -105,17 +104,10 @@ - (void)initWebview:(FlutterMethodCall*)call { } if (clearCookies != (id)[NSNull null] && [clearCookies boolValue]) { - if (@available(iOS 9.0, *)) { - NSSet *websiteDataTypes - = [NSSet setWithArray:@[ - WKWebsiteDataTypeCookies, - ]]; - NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0]; - - [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{ - }]; - } else { - // Fallback on earlier versions + NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + for (NSHTTPCookie *cookie in [storage cookies]) + { + [storage deleteCookie:cookie]; } } @@ -259,6 +251,17 @@ - (void)reloadUrl:(FlutterMethodCall*)call { [self.webview loadRequest:request]; } } + +- (void)cleanCookies { + if(self.webview != nil) { + NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + for (NSHTTPCookie *cookie in [storage cookies]) + { + [storage deleteCookie:cookie]; + } + } +} + - (void)show { if (self.webview != nil) { self.webview.hidden = false; diff --git a/lib/src/base.dart b/lib/src/base.dart index 7060e030..f7f91e78 100644 --- a/lib/src/base.dart +++ b/lib/src/base.dart @@ -258,8 +258,11 @@ class FlutterWebviewPlugin { } // Clean cookies on WebView - Future cleanCookies() async => - await _channel.invokeMethod('cleanCookies'); + Future cleanCookies() async { + // one liner to clear javascript cookies + await evalJavascript('document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });'); + return await _channel.invokeMethod('cleanCookies'); + } // Stops current loading process Future stopLoading() async =>