瀏覽代碼

add flag for some scheme

Ken 8 年之前
父節點
當前提交
43a62d162c
共有 2 個文件被更改,包括 14 次插入2 次删除
  1. 11 1
      ios/Classes/FlutterWebviewPlugin.m
  2. 3 1
      lib/flutter_webview_plugin.dart

+ 11 - 1
ios/Classes/FlutterWebviewPlugin.m

@@ -6,6 +6,7 @@ static NSString *const EVENT_CHANNEL_NAME = @"flutter_webview_plugin_event";
 // UIWebViewDelegate
 @interface FlutterWebviewPlugin() <UIWebViewDelegate, FlutterStreamHandler> {
     FlutterEventSink _eventSink;
+    BOOL _enableAppScheme;
 }
 @end
 
@@ -57,6 +58,7 @@ static NSString *const EVENT_CHANNEL_NAME = @"flutter_webview_plugin_event";
     NSNumber *clearCookies = call.arguments[@"clearCookies"];
     NSNumber *hidden = call.arguments[@"hidden"];
     NSDictionary *rect = call.arguments[@"rect"];
+    _enableAppScheme = call.arguments[@"enableAppScheme"];
     
     //
     if ([clearCache boolValue]) {
@@ -112,8 +114,16 @@ static NSString *const EVENT_CHANNEL_NAME = @"flutter_webview_plugin_event";
 #pragma mark -- WebView Delegate
 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
     [self sendStateEvent:[NSString stringWithFormat:@"shouldStart %@", request.URL]];
-    return YES;
+    
+    if (_enableAppScheme)
+        return YES;
+
+    // disable some scheme
+    return [request.URL.scheme isEqualToString:@"http"] ||
+            [request.URL.scheme isEqualToString:@"https"] ||
+            [request.URL.scheme isEqualToString:@"about"];
 }
+
 -(void)webViewDidStartLoad:(UIWebView *)webView {
     [self sendStateEvent:@"startLoad"];
 }

+ 3 - 1
lib/flutter_webview_plugin.dart

@@ -69,6 +69,7 @@ class FlutterWebviewPlugin {
       bool clearCookies: false,
       bool hidden: false,
       bool fullScreen: true,
+      bool enableAppScheme: true,
       Rect rect: null}) async {
     Map<String, dynamic> args = {
       "url": url,
@@ -76,7 +77,8 @@ class FlutterWebviewPlugin {
       "clearCache": clearCache,
       "hidden": hidden,
       "clearCookies": clearCookies,
-      "fullScreen": fullScreen
+      "fullScreen": fullScreen,
+      "enableAppScheme": enableAppScheme
     };
     if (!fullScreen) assert(rect != null);
     if (rect != null) {