我可以在UIWebViewDelegate中处理警报吗?

Pav*_*nko 4 javascript iphone uiwebview

<script language="javascript">
    alert("Hell! UIWebView!");
</script>
Run Code Online (Sandbox Code Playgroud)

我可以在UIWebView中看到警报消息,我可以处理这种情况吗?

更新:

我正在将一个网页加载到我的UIWebView中:

- (void)login {
    NSString *requestText = [[NSString alloc] initWithFormat: @"%@?user=%@&password=%@", DEFAULT_URL, user.name, user.password];    // YES, I'm using GET request to send password :)
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:requestText]];
    [webView loadRequest:request];
}
Run Code Online (Sandbox Code Playgroud)

目标页面包含JS.如果用户名或密码不正确,则此JS显示警报.我没有访问其来源. 我想在我的UIWebViewDelegate中处理它.

Boo*_*oog 15

解决此问题的更好方法是为该方法创建UIWebView的类别

webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:
Run Code Online (Sandbox Code Playgroud)

这样您就可以以任何方式处理警报事件.我这样做是因为我不喜欢UIWebView的默认行为,因为它将源文件名放在UIAlertView标题中.类别看起来像这样,

@interface UIWebView (JavaScriptAlert) 

- (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame;

@end

@implementation UIWebView (JavaScriptAlert)

- (void)webView:(UIWebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame {
    UIAlertView* dialogue = [[UIAlertView alloc] initWithTitle:nil message:message delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil];
    [dialogue show];
    [dialogue autorelease];
}

@end
Run Code Online (Sandbox Code Playgroud)

  • 我在哪里可以找到WebFrame所属的框架? (2认同)