#iphone #objective-c #ios #cordova #phonegap-plugins
#iPhone #objective-c #iOS #кордова #phonegap-плагины
Вопрос:
Я упаковываю мобильный веб-сайт (по сети) в PhoneGap и хотел бы перехватывать ссылки, указывающие на PDF-файлы, и открывать их с помощью плагина дочернего браузера. Можно ли 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 дня работы)
Ответ №1:
Если вы добавили классы плагинов (дочернего браузера) в папку плагинов, вам придется поиграть с файлом 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 ];
}
}
спасибо,
Маюр
Комментарии:
1. @mayur ты знаешь такой же код для Android?? Я не могу открыть дочерний браузер из собственного кода Android. Спасибо
Ответ №2:
Любой, кто ищет эквивалент Android, поместите ниже код внутри shouldOverrideUrlLoading
ChildBrowser childBrowser = new ChildBrowser();
childBrowser.cordova = this;
childBrowser.showWebPage(url, null);