JC专题iOS日常知识储备对JScript一点不懂

IOS WebView相关及杂谈

2016-07-01  本文已影响212人  宁小缺

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);
   };

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

上一篇 下一篇

猜你喜欢

热点阅读