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];
};
}
这样就可以了。
@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];
};
}
这样就可以了。
相关文章推荐
- 同一张表中字段之间的运算----OUTER APPLY
- Android Studio打包APK时出现 is not translated in "en" (English) [MissingTranslation]
- Swift基础语法
- android和iOS平台的崩溃捕获和收集
- 编译基于cent64,android,suse32平台程序
- iOS完美实现输入框随键盘无缝滑动的效果_KLCPopKeyBoard
- Orange the Apple
- 微信JSSDK分享功能详解
- Android RecyclerView 使用完全解析 体验艺术般的控件
- 发红包android
- Android Glide图片加载框架图片变色变绿解决方法
- Android自定义底部显示对话框
- swift 异步加载图片
- Android开源项目分类汇总
- iOS 解决一个因三方静态库冲突产生的duplicate symbol的问题
- iOS抽屉效果
- 知识片段---webView计算内容高度
- Android聊天实现图文混编(包括gif显示)
- iOS开发 小工具
- srxboys自述