瀏覽代碼

get cookies

Lejard Hadrien 8 年之前
父節點
當前提交
c22327095c

+ 1 - 0
CHANGELOG.md

@@ -1,6 +1,7 @@
 # 0.0.10
 
 - iOS && Android:
+    - get cookies
     - eval javascript
     - user agent setting
     - state change event

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

@@ -1,5 +1,6 @@
 package com.flutter_webview_plugin;
 
+import android.annotation.TargetApi;
 import android.app.Activity;
 import android.os.Build;
 import android.view.View;
@@ -18,18 +19,14 @@ import io.flutter.plugin.common.MethodChannel;
 
 class WebviewManager {
 
-    Activity activity;
     WebView webView;
 
     WebviewManager(Activity activity) {
-        this.activity = activity;
         this.webView = new WebView(activity);
         WebViewClient webViewClient = new BrowserClient();
         webView.setWebViewClient(webViewClient);
     }
 
-
-
     private void clearCookies() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             CookieManager.getInstance().removeAllCookies(new ValueCallback<Boolean>() {
@@ -81,20 +78,15 @@ class WebviewManager {
         FlutterWebviewPlugin.channel.invokeMethod("onDestroy", null);
     }
 
+    @TargetApi(Build.VERSION_CODES.KITKAT)
     void eval(MethodCall call, final MethodChannel.Result result) {
         String code = call.argument("code");
 
-        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
-            webView.evaluateJavascript(code, new ValueCallback<String>() {
-                @Override
-                public void onReceiveValue(String value) {
-                    result.success(value);
-                }
-            });
-        } else {
-            // TODO:
-            webView.loadUrl(code);
-        }
+        webView.evaluateJavascript(code, new ValueCallback<String>() {
+            @Override
+            public void onReceiveValue(String value) {
+                result.success(value);
+            }
+        });
     }
-
 }

+ 14 - 3
example/lib/main.dart

@@ -46,8 +46,8 @@ class _MyHomePageState extends State<MyHomePage> {
   // On urlChanged stream
   StreamSubscription<WebViewStateChanged> _onStateChanged;
 
-  TextEditingController _urlCtrl =
-      new TextEditingController(text: "https://github.com/dart-flitter/flutter_webview_plugin");
+  TextEditingController _urlCtrl = new TextEditingController(
+      text: "https://github.com/dart-flitter/flutter_webview_plugin");
 
   TextEditingController _codeCtrl =
       new TextEditingController(text: "window.navigator.userAgent");
@@ -78,7 +78,8 @@ class _MyHomePageState extends State<MyHomePage> {
       }
     });
 
-    _onStateChanged = flutterWebviewPlugin.onStateChanged.listen((WebViewStateChanged state) {
+    _onStateChanged =
+        flutterWebviewPlugin.onStateChanged.listen((WebViewStateChanged state) {
       if (mounted) {
         setState(() {
           _history.add("onStateChanged: ${state.type} ${state.url}");
@@ -160,6 +161,16 @@ class _MyHomePageState extends State<MyHomePage> {
             },
             child: new Text("Close"),
           ),
+          new RaisedButton(
+            onPressed: () {
+              flutterWebviewPlugin.getCookies().then((m) {
+                setState(() {
+                  _history.add("cookies: $m");
+                });
+              });
+            },
+            child: new Text("Cookies"),
+          ),
           new Text(_history.join("\n"))
         ],
       ),

+ 16 - 3
lib/flutter_webview_plugin.dart

@@ -111,9 +111,8 @@ class FlutterWebviewPlugin {
   }
 
   /// Execute Javascript inside webview
-  Future<String> evalJavascript(String code) {
-    return _channel.invokeMethod('eval', {"code": code});
-  }
+  Future<String> evalJavascript(String code) =>
+      _channel.invokeMethod('eval', {"code": code});
 
   /// Close the Webview
   /// Will trigger the [onDestroy] event
@@ -128,6 +127,20 @@ class FlutterWebviewPlugin {
     _onError.close();
     _instance = null;
   }
+
+  Future<Map<String, dynamic>> getCookies() async {
+    final cookiesString = await evalJavascript("document.cookie");
+    final cookies = {};
+
+    if (cookiesString?.isNotEmpty == true) {
+      cookiesString.split(";").forEach((String cookie) {
+        final splited = cookie.split("=");
+        cookies[splited[0]] = splited[1];
+      });
+    }
+
+    return cookies;
+  }
 }
 
 class WebViewStateChanged {