2013-03-12 1 views
3

Я получаю текст описания в формате HTML, и я загружаю его в веб-просмотр, если ссылка была нажата в описании, поэтому я загружаю его в отдельный контроллер представления. Но shouldStartLoadWithRequest дает некоторую добавленную ссылку. Вот мой кодmustStartLoadWithRequest присоединяющая ссылка с applewebdata

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
if(navigationType == UIWebViewNavigationTypeLinkClicked) { 

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    WebsiteViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"WebsiteViewController"]; 
    vc.url = request.URL.absoluteString; 
    NSLog(@"link is : %@", [[request URL] absoluteString]); 
    [self.navigationController pushViewController:vc animated:YES]; 
    return false; 
} 
return true; 
} 

печатает этого

link is : applewebdata://038EEEBF-A4C9-4C7D-8FB5-32056714B855/www.yahoo.com 

и я его загрузку, как этот

[webViewDescription loadHTMLString:description baseURL:nil]; 

ответ

18

Как вы используете loadHTMLString и вы настраиваете baseURL к нулю, следовательно applewebdata Схема URI используется iOS вместо «http» в URI, используемых для доступа к внутренним ресурсам на устройстве , Вы можете попробовать установить baseURL

+1

Что я должен поставить для baseURL вместо baseURL: nil? –

+1

Я столкнулся с этой проблемой, и для правильной загрузки ссылок я установил базовый URL как @ "http: //" – BreadicalMD

+4

Просто небольшое исправление. Аргумент baseURL принимает объект NSURL, поэтому он должен быть '[NSURL URLWithString: @" http: // "]' not '@" http: // "'. – Hlung

4

У меня была аналогичная проблема. На практике установка baseURL на «http: //» или что-то в этом роде тоже не работала. Я также видел только схему applewebdata около 50% времени, остальные 50% времени я видел правильную схему, которую я ожидал.

Чтобы решить эту проблему, я перехватил обратные вызовы -webView:shouldStartLoadWithRequest:navigationType: и использовал регулярное выражение для исключения схемы Apple applewebdata. Вот как это выглядело как

// Scheme used to intercept UIWebView callbacks 
static NSString *bridgeScheme = @"myCoolScheme"; 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    BOOL shouldStartLoad = YES; 

    NSURL *requestURL = request.URL; 

    // Strip out applewebdata://<UUID> prefix applied when HTML is loaded locally 
    if ([requestURL.scheme isEqualToString:@"applewebdata"]) { 
     NSString *requestURLString = requestURL.absoluteString; 
     NSString *trimmedRequestURLString = [requestURLString stringByReplacingOccurrencesOfString:@"^(?:applewebdata://[0-9A-Z-]*/?)" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, requestURLString.length)]; 
     if (trimmedRequestURLString.length > 0) { 
      requestURL = [NSURL URLWithString:trimmedRequestURLString]; 
     } 
    } 

    if ([requestURL.scheme isEqualToString:bridgeScheme]) { 
     // Do your thing 
     shouldStartLoad = NO; 
    } 

    return shouldStartLoad; 
} 
Смежные вопросы