Pārlūkot izejas kodu

add eval Javascript

Ken 8 gadi atpakaļ
vecāks
revīzija
72be4cbacc

+ 26 - 6
example/lib/main.dart

@@ -42,8 +42,12 @@ class _MyHomePageState extends State<MyHomePage> {
 
   StreamSubscription<String> _onStateChanged;
 
-  TextEditingController _ctrl =
+  TextEditingController _urlCtrl =
       new TextEditingController(text: "https://flutter.io");
+
+  TextEditingController _codeCtrl =
+      new TextEditingController(text: "window.location.href");
+
   GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey();
 
   final _history = [];
@@ -100,11 +104,11 @@ class _MyHomePageState extends State<MyHomePage> {
         children: [
           new Container(
             padding: const EdgeInsets.all(24.0),
-            child: new TextField(controller: _ctrl),
+            child: new TextField(controller: _urlCtrl),
           ),
           new RaisedButton(
             onPressed: () {
-              flutterWebviewPlugin.launch(_ctrl.text,
+              flutterWebviewPlugin.launch(_urlCtrl.text,
                   fullScreen: false,
                   rect: new Rect.fromLTWH(
                       0.0, 0.0, MediaQuery.of(context).size.width, 300.0));
@@ -113,17 +117,33 @@ class _MyHomePageState extends State<MyHomePage> {
           ),
           new RaisedButton(
             onPressed: () {
-              flutterWebviewPlugin.launch(_ctrl.text, hidden: true);
+              flutterWebviewPlugin.launch(_urlCtrl.text, hidden: true);
             },
             child: new Text("Open 'hidden' Webview"),
           ),
           new RaisedButton(
             onPressed: () {
-              flutterWebviewPlugin.launch(_ctrl.text, fullScreen: true);
+              flutterWebviewPlugin.launch(_urlCtrl.text, fullScreen: true);
+            },
+            child: new Text("Open Fullscreen Webview"),
+          ),
+          new Container(
+            padding: const EdgeInsets.all(24.0),
+            child: new TextField(controller: _codeCtrl),
+          ),
+          new RaisedButton(
+            onPressed: () {
+              Future<String> future =
+                  flutterWebviewPlugin.evalJavascript(_codeCtrl.text);
+              future.then((String result) {
+                setState(() {
+                  _history.add(result);
+                });
+              });
             },
             child: new Text("Open Fullscreen Webview"),
           ),
-          new Text(_history.join(", "))
+          new Text(_history.join("\n"))
         ],
       ),
     );

+ 16 - 7
ios/Classes/FlutterWebviewPlugin.m

@@ -44,18 +44,13 @@ static NSString *const EVENT_CHANNEL_NAME = @"flutter_webview_plugin_event";
     } else if ([@"close" isEqualToString:call.method]) {
         [self closeWebView];
         result(nil);
+    } else if ([@"eval" isEqualToString:call.method]) {
+        result([self evalJavascript:call]);
     } else {
         result(FlutterMethodNotImplemented);
     }
 }
 
-- (void)launch:(FlutterMethodCall*)call {
-    NSString *url = call.arguments[@"url"];
-    
-    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
-    [self.webview loadRequest:request];
-}
-
 - (void)initWebView:(FlutterMethodCall*)call {
     // NSNumber *withJavascript = call.arguments[@"withJavascript"];
     NSNumber *clearCache = call.arguments[@"clearCache"];
@@ -92,6 +87,20 @@ static NSString *const EVENT_CHANNEL_NAME = @"flutter_webview_plugin_event";
     [self launch:call];
 }
 
+- (void)launch:(FlutterMethodCall*)call {
+    NSString *url = call.arguments[@"url"];
+    
+    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
+    [self.webview loadRequest:request];
+}
+
+- (NSString *)evalJavascript:(FlutterMethodCall*)call {
+    NSString *code = call.arguments[@"code"];
+    
+    NSString *result = [self.webview stringByEvaluatingJavaScriptFromString:code];
+    return result;
+}
+
 - (void)closeWebView {
     [self.webview stopLoading];
     [self.webview removeFromSuperview];

+ 7 - 3
lib/flutter_webview_plugin.dart

@@ -28,9 +28,9 @@ class FlutterWebviewPlugin {
   final StreamController<String> _onUrlChanged =
       new StreamController.broadcast();
 
-  FlutterWebviewPlugin() : 
-    _channel = const MethodChannel(_kChannel),
-    _event = const EventChannel(_kEvent) {
+  FlutterWebviewPlugin()
+      : _channel = const MethodChannel(_kChannel),
+        _event = const EventChannel(_kEvent) {
     _channel.setMethodCallHandler(_handleMessages);
   }
 
@@ -90,6 +90,10 @@ class FlutterWebviewPlugin {
     await _channel.invokeMethod('launch', args);
   }
 
+  Future<Null> evalJavascript(String code) {
+    return _channel.invokeMethod('eval', {"code": code});
+  }
+
   /// Close the Webview
   /// Will trigger the [onDestroy] event
   Future<Null> close() => _channel.invokeMethod("close");