UIWebView: открыть некоторые ссылки в Safari, некоторые в представлении - PullRequest
2 голосов
/ 06 сентября 2010

Мое приложение содержит контент, который (по причинам форматирования текста) представлен в UIWebView. Внутри контента есть ссылки, некоторые из которых должны открывать свою цель в мобильном Safari, а другие должны перемещаться по контенту.

До сих пор я ловил запросы на ссылку, используя делегат UIWebView. В моей реализации

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

Я бы проверил URL запросов, используя lastPathComponent или pathComponents для известных элементов, чтобы определить, открывать ли ссылку снаружи или в представлении.

Однако я только что узнал, что указанные методы доступны только с iOS 4.0, что делает приложение бесполезным на iPad. Плюс у меня такое ощущение, что я использую грязный раствор здесь.

Есть ли другой способ как-то "пометить" ссылки в моем контенте таким образом, чтобы их было легче различить позже при обработке запроса в методе делегата?

Большое спасибо !!

Ответы [ 2 ]

1 голос
/ 06 сентября 2010

Вы можете преобразовать запрос URL в строку и выполнить сравнение для подкаталога на своем веб-сайте, например, для URL, которые начинаются только с "http://www.sample.com/myapp/myappswebcontent/", с начальной подстрокой вашего URL. отправить в Safari.

1 голос
/ 06 сентября 2010

Вы должны установить делегат политики веб-представления: например, в контроллере, который содержит веб-представление

[webView setPolicyDelegate:self];

, а затем переопределить метод definePolicyForNavigation (это только пример):

- (void)webView:(WebView *)sender decidePolicyForNavigationAction: (NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id <WebPolicyDecisionListener>)listener
{       
    if ([[actionInformation objectForKey:WebActionNavigationTypeKey] intValue]  == WebNavigationTypeLinkClicked) {
        [listener ignore];
        [[NSWorkspace sharedWorkspace] openURL:[request URL]];
    }
    else
        [listener use];
}

Вы можете различить там вид ссылки и игнорировать или использовать прослушиватель.Если вы игнорируете это, вы можете открыть ссылку в Safari, если вы используете ее, ссылка откроется в вашем веб-просмотре.

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...