Prechádzať zdrojové kódy

Merge pull request #513 from charafau/reload_webview_headers

Reload webview headers, ios clear cookies
Rafal Wachol 6 rokov pred
rodič
commit
03fef495f6

+ 7 - 1
android/src/main/java/com/flutter_webview_plugin/FlutterWebviewPlugin.java

@@ -204,7 +204,13 @@ public class FlutterWebviewPlugin implements MethodCallHandler, PluginRegistry.A
     private void reloadUrl(MethodCall call, MethodChannel.Result result) {
         if (webViewManager != null) {
             String url = call.argument("url");
-            webViewManager.reloadUrl(url);
+            Map<String, String> headers = call.argument("headers");
+            if (headers != null) {
+                webViewManager.reloadUrl(url, headers);
+            } else {
+                webViewManager.reloadUrl(url);
+            }
+
         }
         result.success(null);
     }

+ 8 - 2
android/src/main/java/com/flutter_webview_plugin/WebviewManager.java

@@ -373,8 +373,10 @@ class WebviewManager {
         webView.getSettings().setUseWideViewPort(useWideViewPort);
         
         // Handle debugging
-        webView.setWebContentsDebuggingEnabled(debuggingEnabled);
-        
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+            webView.setWebContentsDebuggingEnabled(debuggingEnabled);
+        }
+
         webViewClient.updateInvalidUrlRegex(invalidUrlRegex);
 
         if (geolocationEnabled) {
@@ -416,6 +418,10 @@ class WebviewManager {
         webView.loadUrl(url);
     }
 
+    void reloadUrl(String url, Map<String, String> headers) {
+        webView.loadUrl(url, headers);
+    }
+
     void close(MethodCall call, MethodChannel.Result result) {
         if (webView != null) {
             ViewGroup vg = (ViewGroup) (webView.getParent());

+ 19 - 3
ios/Classes/FlutterWebviewPlugin.m

@@ -92,8 +92,18 @@ static NSString *const CHANNEL_NAME = @"flutter_webview_plugin";
     }
 
     if (clearCookies != (id)[NSNull null] && [clearCookies boolValue]) {
-        [[NSURLSession sharedSession] resetWithCompletionHandler:^{
-        }];
+        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
+        }
     }
 
     if (userAgent != (id)[NSNull null]) {
@@ -217,7 +227,13 @@ static NSString *const CHANNEL_NAME = @"flutter_webview_plugin";
 - (void)reloadUrl:(FlutterMethodCall*)call {
     if (self.webview != nil) {
 		NSString *url = call.arguments[@"url"];
-		NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
+		NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
+        NSDictionary *headers = call.arguments[@"headers"];
+        
+        if (headers != nil) {
+            [request setAllHTTPHeaderFields:headers];
+        }
+        
         [self.webview loadRequest:request];
     }
 }

+ 5 - 2
lib/src/base.dart

@@ -202,8 +202,11 @@ class FlutterWebviewPlugin {
   Future<Null> show() async => await _channel.invokeMethod('show');
 
   // Reload webview with a url
-  Future<Null> reloadUrl(String url) async {
-    final args = <String, String>{'url': url};
+  Future<Null> reloadUrl(String url, {Map<String, String> headers}) async {
+    final args = <String, dynamic>{'url': url};
+    if (headers != null) {
+      args['headers'] = headers;
+    }
     await _channel.invokeMethod('reloadUrl', args);
   }