UIWebView에서 alert이나 confirm 스크립트를 호출하면 현재 접속한 페이지의 도메인이나 IP가 출력되는 현상이 발생된다. 이때 타이틀이나 내용, 버튼에 대한 부분을 처리하려면 상당히 번거로운 상황에 처하게 되었다.

인터넷에 찾아본 결과 해결방법은 iOS가 아닌 WebKit프레임워크를 델리게이트 메소드를 카테고리로 오버라이딩하여 화면에 노출 부분만 변경하도록 하면 해결되었다.

 #import <UIKit/UIKit.h>
@interface UIWebView (Javascript)
- (BOOL)webView:(UIWebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame;
- (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame;
@end

 

#import "UIWebView+Javascript.h"

@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

+ Recent posts