UIWebView에서 alert이나 confirm 스크립트를 호출하면 현재 접속한 페이지의 도메인이나 IP가 출력되는 현상이 발생된다. 이때 타이틀이나 내용, 버튼에 대한 부분을 처리하려면 상당히 번거로운 상황에 처하게 되었다.
인터넷에 찾아본 결과 해결방법은 iOS가 아닌 WebKit프레임워크를 델리게이트 메소드를 카테고리로 오버라이딩하여 화면에 노출 부분만 변경하도록 하면 해결되었다.
- (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame;
@implementation UIWebView (Javascript)
static BOOL diagStat = NO;
- (BOOL)webView:(UIWebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame {
// NSLog(@"javascript ConfirmPanel : %@",message);
UIAlertView *confirmDiag = [[UIAlertView alloc] initWithTitle:nil message:message delegate:self cancelButtonTitle:NSLocalizedString(@"예", @"예") otherButtonTitles:NSLocalizedString(@"아니오", @"아니오"), nil];
[confirmDiag show];
//버튼 누르기전까지 지연.
while (confirmDiag.hidden == NO && confirmDiag.superview != nil) {
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01f]];
}
[confirmDiag release];
return diagStat;
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
//index 0 : YES , 1 : NO
if (buttonIndex == 0){
//return YES;
diagStat = YES;
} else if (buttonIndex == 1) {
//return NO;
diagStat = NO;
}
}
- (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame {
// NSLog(@"javascript alert : %@",message);
UIAlertView* customAlert = [[UIAlertView alloc] initWithTitle:nil message:message delegate:nil cancelButtonTitle:@"확인" otherButtonTitles:nil];
[customAlert show];
[customAlert autorelease];
}
@end
'iOS' 카테고리의 다른 글
MPMoviePlayerController를 사용하여 화면 off (Background) 상태에서도 음악 재생하기 (0) | 2013.06.07 |
---|---|
MPMoviePlayerController에서 풀스크린으로 사용하기 (0) | 2013.06.04 |
ios에서 ttf폰트 사용하기 (0) | 2012.10.22 |
iOS6 shouldAutorotate NavigationViewController 문제 (0) | 2012.09.24 |
Instruments에서 Retain Count 확인 방법 (0) | 2012.09.05 |