2013-10-07 1 views
0

Я использую PhoneGap 2.3 - Cleaver для iOS.Использование PhoneGap Cleaver в iOS для переопределения метода

Как я могу переопределить функцию shouldStartLoadWithRequest, webViewDidStartLoad, webViewDidFinishLoad?

Если я добавлю viewController.webView.delegate = self, для просмотраDidLoad, вызывается вышеупомянутые функции, но API PhoneGap не может быть вызван.

Спасибо.

MyViewController.m:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    CDVViewController* viewController = [CDVViewController new]; 
    viewController.view.frame = self.view.bounds; 
    //viewController.webView.delegate = self; 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:landingURL]]; 
    [viewController.webView loadRequest:request]; 
    [self.view addSubview:viewController.view]; 
    [self addChildViewController:viewController]; 
} 

MyViewController.h:

@interface MyViewController : UIViewController <UIWebViewDelegate> 
@end 

ответ

0

Вы не должны переопределять shouldStartLoadWithRequest, потому что есть, где они управляют JavaScript URLs, которые вызывают собственные функции.

Или, по крайней мере, скопируйте их код с CDVViewController в контроллер просмотра и добавьте нужные вещи.

пример из PhoneGap 2.9.1

- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSURL* url = [request URL]; 

    /* 
    * Execute any commands queued with cordova.exec() on the JS side. 
    * The part of the URL after gap:// is irrelevant. 
    */ 
    if ([[url scheme] isEqualToString:@"gap"]) { 
     [_commandQueue fetchCommandsFromJs]; 
     return NO; 
    } 

    /* 
    * If a URL is being loaded that's a file/http/https URL, just load it internally 
    */ 
    else if ([url isFileURL]) { 
     return YES; 
    } 

    /* 
    * If we loaded the HTML from a string, we let the app handle it 
    */ 
    else if (self.loadFromString == YES) { 
     self.loadFromString = NO; 
     return YES; 
    } 

    /* 
    * all tel: scheme urls we let the UIWebview handle it using the default behavior 
    */ 
    else if ([[url scheme] isEqualToString:@"tel"]) { 
     return YES; 
    } 

    /* 
    * all about: scheme urls are not handled 
    */ 
    else if ([[url scheme] isEqualToString:@"about"]) { 
     return NO; 
    } 

    /* 
    * all data: scheme urls are handled 
    */ 
    else if ([[url scheme] isEqualToString:@"data"]) { 
     return YES; 
    } 

    /* 
    * Handle all other types of urls (tel:, sms:), and requests to load a url in the main webview. 
    */ 
    else { 
     if ([self.whitelist schemeIsAllowed:[url scheme]]) { 
      return [self.whitelist URLIsAllowed:url]; 
     } else { 
      if ([[UIApplication sharedApplication] canOpenURL:url]) { 
       [[UIApplication sharedApplication] openURL:url]; 
      } else { // handle any custom schemes to plugins 
       [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]]; 
      } 
     } 

     return NO; 
    } 

    return YES; 
} 

в if ([[url scheme] isEqualToString:@"gap"]) управляет PhoneGap называет

Кстати, вы не должны использовать PhoneGap 2,3, необходимо, по крайней мере 2.5, чтобы передать директивы магазина яблока добавлены в мае, версии, предшествующие 2.5, использовали UDID, и это запрещено яблоком

 Смежные вопросы

  • Нет связанных вопросов^_^