- @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* customAlert = [[UIAlertView alloc] initWithTitle:@"提示信息" message:message delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
- [customAlert show];
- }
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
//获取js写的界面的title
NSString *title = [_webVIew stringByEvaluatingJavaScriptFromString:@“document.title"];
//导航栏上显示获取的titile
lable.text = title;
/*解决webview上内嵌的页面中弹出来的alert有域名问题!*/ PS:这个才是这篇博客的关键
//1、获取js的执行环境
JSContext *ctx = [webView valueForKeyPath:@“documentView.webView.mainFrame.javaScriptContext"];
//2、js那边写的提示框的函数入口,这里差不多有点重写那个函数的意思。JSValue *message参数可以获取到js中的提示信息,OC中需要转换为string显示出来,好了完成了。
ctx[@"window"][@"alert"] = ^(JSValue *message) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:[message toString] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
};
}