PhoneGap / iOS, откройте ChildBrowser из .shouldStartLoadWithRequest ()? - PullRequest
3 голосов
/ 31 октября 2011

Я упаковываю мобильный сайт (по сети) в PhoneGap и хотел бы перехватить ссылки, указывающие на PDF-файлы, и открыть их с помощью плагина ChildBrowser . 1 : возможно ли вызвать ChildBrowser из собственного кода (я уже определил, какие ссылки перехватывать) и 2 : AppDelegate.m, .shouldStartLoadWithRequest() в нужном местесделать это?И в этом случае: 3 : как правильно вызвать ChildBrowser из собственного кода?

Я пробовал этот заведомо наивный подход:

return [self exec:@"ChildBrowserCommand.showWebPage",
      [url absoluteString]];

но этовылилась только в ошибку ...'NSInvalidArgumentException', reason: '-[AppDelegate exec:]: unrecognized selector sent to instance.

(PS: я знаю, что этот подход не идеальная практика, но этот проект стоит только 2 дня работы)

Ответы [ 2 ]

7 голосов
/ 31 октября 2011

Если вы добавили ( Child Browser ) классы плагинов в папку плагинов, то вам придется поиграться с файлом appDelegate.m, #import "ChildBrowserViewController.h"
Например, ваш html-файл имеет следующий html / javascript-код, например,
window.location="http://xyz.com/magazines/magazines101.pdf";
Чтобы выполнить этот URL-адрес в дочернем браузере, необходимо изменить собственный метод shouldStartLoadWithRequest: для URL-адреса запроса, содержащего файлы расширения PDF.


/**
 * Start Loading Request
 * This is where most of the magic happens... We take the request(s) and process the response.
 * From here we can re direct links and other protocalls to different internal methods.
 */
- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    //return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
    NSURL *url = [request URL];
    if([request.URL.absoluteString isEqualToString:@"about:blank"])
        return [ super webView:theWebView shouldStartLoadWithRequest:request
                navigationType:navigationType ];
    if ([[url scheme] isEqualToString:@"gap"]) {
        return [ super webView:theWebView shouldStartLoadWithRequest:request
                navigationType:navigationType ];
    } else {
        NSString *urlFormat = [[[url path] componentsSeparatedByString:@"."] lastObject];
        if ([urlFormat compare:@"pdf"] == NSOrderedSame) {
            [theWebView sizeToFit];
            //This code will open pdf extension files (url's) in Child Browser
            ChildBrowserViewController* childBrowser = [ [ ChildBrowserViewController alloc ] initWithScale:FALSE ];
            childBrowser.modalPresentationStyle = UIModalPresentationFormSheet;
            childBrowser.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;   
            [super.viewController presentModalViewController:childBrowser animated:YES ];   
            NSString* urlString=[NSString stringWithFormat:@"%@",[url absoluteString]]; 
            [childBrowser loadURL:urlString];
            [childBrowser release];
            return NO;      
        } 
        else
            return [ super webView:theWebView shouldStartLoadWithRequest:request
                    navigationType:navigationType ];    
    } 
}

спасибо,
Mayur

0 голосов
/ 01 августа 2013

Любой, кто ищет Android-эквивалент, поместите код ниже shouldOverrideUrlLoading

ChildBrowser childBrowser = new ChildBrowser();
childBrowser.cordova = this;
childBrowser.showWebPage(url, null);
...