2013-07-22 2 views
0

웹 사이트를로드하는 데 잘 작동하는 webview 응용 프로그램이 있습니다. 내가 달성하고자하는 것은 그것이 도청 된 URL이 내 사이트에 속하는지 아닌지를 결정해야합니다. 그렇지 않은 경우 새보기 컨트롤러를 엽니 다.새 웹보기보기 컨트롤러에서 외부 URL 열기

나는 이것으로 뭔가를해야한다는 것을 알고있다.

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

하지만 최선의 방법은 모르겠다. 내가 검색 한 내용에서 웹뷰 (아무 문제도 없음)에 URL을로드하거나 사파리를 시작하는 방법 만 보여줍니다 (원하는 내용이 아님).

정보 나 안내에 감사드립니다.

UPDATE 8/26 :

//Download manager 
- (BOOL)webView:(UIWebView *)awebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 

    if (navigationType == UIWebViewNavigationTypeLinkClicked) { 

     #define kHostName @"http://www.mysite.com" 
     NSString *host = [[request URL] host]; 
     if ([host isEqualToString:kHostName]) 
      return YES; 
     else 
     { 
      WebImageViewController * vc = [[WebImageViewController alloc] initWithURL:[request URL]]; 
      [self.navigationController pushViewController:vc animated:YES]; 
      [vc release]; 
      return NO; 
     } 


     //External file links 
     NSURL *externalURL = [request URL]; 
     NSString *externalFileExtension = [[externalURL absoluteString] pathExtension]; 

     //External file extensions 
     NSLog(@"fileExtension is: %@", externalFileExtension); 
     if ([externalFileExtension hasSuffix:@"zip"] || [externalFileExtension hasSuffix:@"deb"] || [externalFileExtension hasSuffix:@"rar"] || [externalFileExtension hasSuffix:@"mp3"] || [externalFileExtension hasSuffix:@"pdf"] || [externalFileExtension hasSuffix:@"exe"] || [externalFileExtension hasSuffix:@"mp4"] || [externalFileExtension hasSuffix:@"flv"] || [externalFileExtension hasSuffix:@"torrent"] || [externalFileExtension hasSuffix:@"aiff"] || [externalFileExtension hasSuffix:@"css"] || [externalFileExtension hasSuffix:@"doc"] || [externalFileExtension hasSuffix:@"gz"] || [externalFileExtension hasSuffix:@"hqx"] || [externalFileExtension hasSuffix:@"htm"] || [externalFileExtension hasSuffix:@"html"] || [externalFileExtension hasSuffix:@"ico"] || [externalFileExtension hasSuffix:@"ipa"] || [externalFileExtension hasSuffix:@"mov"] || [externalFileExtension hasSuffix:@"mpg"] || [externalFileExtension hasSuffix:@"ppt"] || [externalFileExtension hasSuffix:@"ps"] || [externalFileExtension hasSuffix:@"ram"] || [externalFileExtension hasSuffix:@"rtf"] || [externalFileExtension hasSuffix:@"swf"] || [externalFileExtension hasSuffix:@"tar"] || [externalFileExtension hasSuffix:@"tiff"] || [externalFileExtension hasSuffix:@"txt"] || [externalFileExtension hasSuffix:@"viv"] || [externalFileExtension hasSuffix:@"wav"] || [externalFileExtension hasSuffix:@"wmv"] || [externalFileExtension hasSuffix:@"xml"] || [externalFileExtension hasSuffix:@"ipsw"]) { 



      NSError *error = nil; //error setting 
      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
      NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder 
      NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"downloads"]; 

      if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) 
       [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Create folder 

      //Download manager 
      HCDownloadViewController *dlvc = [[HCDownloadViewController alloc] init]; 
      [dlvc downloadURL:externalURL userInfo:nil]; 

      [self.navigationController setNavigationBarHidden:NO]; 
      self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0/255.0f green:0/255.0f blue:0/255.0f alpha:1]; 
      [self.navigationController pushViewController:dlvc animated:YES]; 
      dlvc.delegate = self; 

     }else{ 

      //Internal file links 
      NSURL *internalURl = [request URL]; 
      NSString *internalFileExtension = [internalURl pathExtension]; 

      //Internal file extensions 
      NSLog(@"fileExtension is: %@", internalFileExtension); 
      if ([internalFileExtension hasSuffix:@"zip"] || [internalFileExtension hasSuffix:@"deb"] || [internalFileExtension hasSuffix:@"rar"] || [internalFileExtension hasSuffix:@"mp3"] || [internalFileExtension hasSuffix:@"pdf"] || [internalFileExtension hasSuffix:@"exe"] || [internalFileExtension hasSuffix:@"mp4"] || [internalFileExtension hasSuffix:@"flv"] || [internalFileExtension hasSuffix:@"torrent"] || [internalFileExtension hasSuffix:@"aiff"] || [internalFileExtension hasSuffix:@"css"] || [internalFileExtension hasSuffix:@"doc"] || [internalFileExtension hasSuffix:@"gz"] || [internalFileExtension hasSuffix:@"hqx"] || [internalFileExtension hasSuffix:@"htm"] || [internalFileExtension hasSuffix:@"html"] || [internalFileExtension hasSuffix:@"ico"] || [internalFileExtension hasSuffix:@"ipa"] || [internalFileExtension hasSuffix:@"mov"] || [internalFileExtension hasSuffix:@"mpg"] || [internalFileExtension hasSuffix:@"ppt"] || [internalFileExtension hasSuffix:@"ps"] || [internalFileExtension hasSuffix:@"ram"] || [internalFileExtension hasSuffix:@"rtf"] || [internalFileExtension hasSuffix:@"swf"] || [internalFileExtension hasSuffix:@"tar"] || [internalFileExtension hasSuffix:@"tiff"] || [internalFileExtension hasSuffix:@"txt"] || [internalFileExtension hasSuffix:@"viv"] || [internalFileExtension hasSuffix:@"wav"] || [internalFileExtension hasSuffix:@"wmv"] || [internalFileExtension hasSuffix:@"xml"] || [internalFileExtension hasSuffix:@"ipsw"]) { 


       NSError *error = nil; //error setting 
       NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
       NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder 
       NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"downloads"]; 

       if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) 
        [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error]; //Create folder 

       //Download manager 
       HCDownloadViewController *dlvc = [[HCDownloadViewController alloc] init]; 
       [dlvc downloadURL:internalURl userInfo:nil]; 

       [self.navigationController setNavigationBarHidden:NO]; 
       self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0/255.0f green:0/255.0f blue:0/255.0f alpha:1]; 
       [self.navigationController pushViewController:dlvc animated:YES]; 
       dlvc.delegate = self; 

      }else{ 

/////////////// 
//IMAGE CODE/// 
/////////////// 
       //Image file links 
       NSURL *imageURl = [request URL]; 
       NSString *imageFileExtension = [[imageURl absoluteString] pathExtension]; 


       //Image file extensions 
       NSLog(@"fileExtension is: %@", imageFileExtension); 
       if ([imageFileExtension hasSuffix:@"png"] || [imageFileExtension hasSuffix:@"jpg"] || [imageFileExtension hasSuffix:@"jpeg"] || [imageFileExtension hasSuffix:@"gif"] || [imageFileExtension hasSuffix:@"bmp"] || [imageFileExtension hasSuffix:@"raw"] || [imageFileExtension hasSuffix:@"PNG"] || [imageFileExtension hasSuffix:@"JPG"] || [imageFileExtension hasSuffix:@"JPEG"] || [imageFileExtension hasSuffix:@"GIF"] || [imageFileExtension hasSuffix:@"BMP"] || [imageFileExtension hasSuffix:@"RAW"]) { 

        [webView stopLoading]; 
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

        //Image manager 
        WebImageViewController * vc = [[WebImageViewController alloc] initWithURL:[request URL]]; 
        [self.navigationController pushViewController:vc animated:YES]; 
        [vc release]; 

       }else{ 

        //Image file links 
        NSURL *imageURl = [request URL]; 
        NSString *imageFileExtension = [imageURl pathExtension]; 

        //Image file extensions 
        NSLog(@"fileExtension is: %@", imageFileExtension); 
       if ([imageFileExtension hasSuffix:@"png"] || [imageFileExtension hasSuffix:@"jpg"] || [imageFileExtension hasSuffix:@"jpeg"] || [imageFileExtension hasSuffix:@"gif"] || [imageFileExtension hasSuffix:@"bmp"] || [imageFileExtension hasSuffix:@"raw"] || [imageFileExtension hasSuffix:@"PNG"] || [imageFileExtension hasSuffix:@"JPG"] || [imageFileExtension hasSuffix:@"JPEG"] || [imageFileExtension hasSuffix:@"GIF"] || [imageFileExtension hasSuffix:@"BMP"] || [imageFileExtension hasSuffix:@"RAW"]) {       

        [webView stopLoading]; 
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

        //Image manager 
        WebImageViewController * vc = [[WebImageViewController alloc] initWithURL:[request URL]]; 
        [self.navigationController pushViewController:vc animated:YES]; 
        [vc release]; 

        }else{ 

        //Image file links 
        NSURL *imageURl = [request URL]; 
        NSString *imageFileExtension = [imageURl absoluteString]; 

        //Image file extensions 
        NSLog(@"fileExtension is: %@", imageFileExtension); 
       if ([imageFileExtension hasSuffix:@"png"] || [imageFileExtension hasSuffix:@"jpg"] || [imageFileExtension hasSuffix:@"jpeg"] || [imageFileExtension hasSuffix:@"gif"] || [imageFileExtension hasSuffix:@"bmp"] || [imageFileExtension hasSuffix:@"raw"] || [imageFileExtension hasSuffix:@"PNG"] || [imageFileExtension hasSuffix:@"JPG"] || [imageFileExtension hasSuffix:@"JPEG"] || [imageFileExtension hasSuffix:@"GIF"] || [imageFileExtension hasSuffix:@"BMP"] || [imageFileExtension hasSuffix:@"RAW"]) {        

        [webView stopLoading]; 
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

        //Image manager 
        WebImageViewController * vc = [[WebImageViewController alloc] initWithURL:[request URL]]; 
        [self.navigationController pushViewController:vc animated:YES]; 
        [vc release]; 

        return NO; 

        } 
       } 
      } 
     } 
    } 
} 

    return YES; 
} 

답변

0

당신이 hasPrefix 사용하여 시도 할 수

[[request URL] absoluteString] 

을 언급 한 방법에서 확인하십시오 : URL이의 이름으로 시작하는 경우 확인 (있는 NSString *) 접두사 귀하의 사이트. 경우 presentViewController를 사용하려면이 팅겨, 분명히

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    if (navigationType == UIWebViewNavigationTypeLinkClicked) 
    { 
     NSString *host = [[request URL] host]; 
     if ([host isEqualToString:kHostName]) 
      return YES; 
     else 
     { 
      ViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"webview"]; 
      controller.url = request.URL; 
      [self.navigationController pushViewController:controller animated:YES]; 
      return NO; 
     } 
    } 

    return YES; 
} 

:

[[[request URL] absoluteString] hasPrefix:@"http://www.yoursite.com"]; 
0

당신은 새로운 뷰 컨트롤러를 host을 확인하고 자신의 도메인의 경우 YES을 반환하거나하지 않을 경우 NO를 반환 한 다음 수동으로 열어야합니다 당신은 모달 프레 젠 테이션을하고 싶습니다. 마찬가지로 NIB를 사용하는 경우 instantiateViewControllerWithIdentifier[[ViewController alloc] initWithNibName:nil bundle:nil]; (또는 기타)으로 바꿉니다. 그리고 내보기 컨트롤러 공용 속성, NSURL *url,하지만 당신이 원하는 모든 속성을 사용합니다. 그러나 희망적으로 이것은 아이디어를 설명합니다.

+0

시도해보십시오. 내가 IB를 사용하지 않는 것만이 모든 코드입니다. 추가 지원을 위해 shouldStartLoadWithRequest를 게시 할 예정입니다. – ChrisOSX

+0

@ChrisOSX 괜찮습니다. 평소와 같이 코드를 통해보기 컨트롤러를 인스턴스화하면 해당 컨트롤러가 열길 원하는 url의 속성을 설정 한 다음 적절하게 (presentViewController 또는 pushViewController를 통해) 전환 할 수 있습니다. 그러나 아이디어는 동일합니다 : 호스트를 점검하고, 기존 코드를 수행하고, 기존 코드를 수행하지 않는 경우, 위 코드의 순열을 수행하십시오. – Rob

+0

구성하는 방법에 관계없이 내 사용자 지정보기 컨트롤러에서 모든 링크가 열리는 것 같습니다. 이 "kHostName"도 오류를 발생시킵니다. "kCFHostNames"로 변경하길 원합니다. – ChrisOSX