您的位置:首页 > 移动开发

UIWebView中显示js代码写的提示框带域名问题

2016-01-26 14:27 417 查看
问题描述:项目中有个界面是内嵌的,用UIWebView完成内嵌,里面有个提交按钮控件,点击之后如果有不符合条件的会弹出个提示框,但是这个提示框是js那边写的,在这边显示出来会自带一个域名,这样不太好看,为了解决这个问题,我逛了很多网站,国内的博客有讲解的,而且都是标注的是原创,但是代码都是一模一样的,太搞笑了,好多的有人评论博主自己都不知道怎么回答,最关键的是根本不能用(至少我看到好多说不能用的),他们写法如下:

@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];

}

这个我根本不能用,里面的WebFrame根本没有。我在stack overflow上看到了上述代码一模一样,所以这些代码怎么来的我一下就清楚了。希望写原创的博主认真点,原创其实并不是复制人家的东西然后自己ctrl+v就算自己的了。

下面看看怎么解决这个问题吧,直接上代码,我这个也是在那个网站上看到了:
在web view的代理方法里面写

-(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];
};

}

这样就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: