js中有 ALert confirm 和promopt 三种 类似ios本地的 UIAlertview 样子
但是在 ios native 的app 中 弹出的话alert 的title 是 url 的地址,比较丑
为了美观,我们要加入以下的方法。
- #import <UIKit/UIKit.h>
- @interface UIWebView (JavaScriptAlert)
- -(void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame;
- -(BOOL)webView:(UIWebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame;
- @end
- #import "UIWebView+JavaScriptAlert.h"
- @implementation UIWebView (JavaScriptAlert)
- static BOOL diagStat = NO;
- -(void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame{
- UIAlertView* dialogue = [[UIAlertView alloc]initWithTitle:nil message:message delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil, nil];
- [dialogue show];
- [dialogue autorelease];
- }
- -(BOOL)webView:(UIWebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame{
- UIAlertView* dialogue = [[UIAlertView alloc] initWithTitle:nil message:message delegate:self cancelButtonTitle:NSLocalizedString(@"Okay", @"Okay") otherButtonTitles:NSLocalizedString(@"Cancel", @"Cancel"), nil];
- [dialogue show];
- while (dialogue.hidden==NO && dialogue.superview!=nil) {
- [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01f]];
- }
- [dialogue release];
- return diagStat;
- }
- -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
- if (buttonIndex==0) {
- diagStat=YES;
- }else if(buttonIndex==1){
- diagStat=NO;
- }
- }
- @end