IOS WebView相关及杂谈

1.去除导航栏下面的白线

UIImageView * backGroundView =     [self.navigationController.navigationBar valueForKey:@"_backgroundView"];
for(UIView *view in backGroundView.subviews) {
    if(view.bounds.size.height <= 1.0f) {
        [view removeFromSuperview];
    }
}

iOS7的Cell的分割线宽度不满屏,解决方法

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
        [_tableView setSeparatorInset:(UIEdgeInsetsMake(0, 0, 0, 0))];
    }

webView返回上一级

  [webView goBack];

webView获取html标题、内容

- (void)webViewDidFinishLoad:(UIWebView *)webView {
UIWebView *web = webView;
**//获取所有的html**
NSString *allHtmlInfo = [web stringByEvaluatingJavaScriptFromString:@"document.documentElement.innerHTML"];
NSLog(@"%@",allHtmlInfo);
**//获取网页title**
NSString *titleHtmlInfo = [web stringByEvaluatingJavaScriptFromString:@"document.title"];
NSLog(@"%@",titleHtmlInfo);
**//获取网页的一个值**
NSString *numHtmlInfo = [web stringByEvaluatingJavaScriptFromString:@"document.getElementById('title').innerText"];
NSLog(@"%@",numHtmlInfo);
}

JsExport

1.加框架 《JavaScriptCore.framework》
2.创建你的对外接口类
类继承自NSObject 加入<JavaScriptCore/JavaScriptCore.h>头文件
声明一个协议 协议继承<JSExport>


.h文件

自己创建的类遵循你所创建的协议,需要对外的方法声明为协议方法,在自己的类中进行实现


.m文件

在自己webView类 或者webView的webViewDidFinishLoad方法中,进行设置(导入自己的JSExport类)

//上下文
    JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//类进行实例化  
    MyJsExport *testJO=[[MyJsExport alloc]init];
//对上下文进行操作 control为传给后台的对象,用对象调用类中的方法即可
//后台调用格式为control.openCall('参数A','参数B')
    context[@"control"]=testJO;

另一种实现方式是直接在webViewDidFinishLoad方法中实现,不需要创建JSExport

JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
  context[@"control"] = ^() {
        //获取后台返回的数据
       NSArray *args = [JSContext currentArguments];
        NSLog(@"args.count--->%ld",(unsigned long)args.count);
        JSValue * json = args[0];
        if (json.toString.length != 0) {
          [[UIApplication sharedApplication]openURL:[NSURL URLWithString:json.toString]];
        }
        NSLog(@"----------%@",json.toString);
   };

这种方式实现的弊端,只能传参数,没有方法 调用对象,当有判断条件时,代码量多,且不利于维护,不建议

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JavaScriptCore框架主要是用来实现iOS与H5的交互。由于现在混合编程越来越多,H5的相对讲多,所以研...
    水灵芳蕥阅读 1,441评论 1 8
  • 跟原生开发相比,H5的开发相对来一个成熟的框架和团队来讲在开发速度和开发效率上有着比原生很大的优势,至少不用等待审...
    大冲哥阅读 1,869评论 0 7
  • 一本可以让你明晰方向,完善自我,改变命运的书! 你的过去并不重要,但你现在所做的,将决定你的未来! 看似一本一看就...
    张语桐阅读 734评论 1 3
  • 我们总说健康健康,所谓的健康到底是个什么东西? 健: 强有力也(健儿); 使之健(健胃,健体); ...
    杏林园中一颗草阅读 863评论 0 0
  • 【1】 自打从秦始皇密陵里逃出来,小哥就不知所踪。 三个月的音信全无,让我时不时怀疑,我是不是真的认识过这样一个人...
    鲸鱼大布布阅读 723评论 2 6