美文网首页
iOS与HTML交互

iOS与HTML交互

作者: 代小怂圆滚滚_Kris | 来源:发表于2017-02-10 14:17 被阅读0次
Simulator Screen Shot 2017年2月10日 下午2.16.07.png

这是一个HTML页面,需要我们做数据交互。
具体实现思路就是使用iOS的一个库<JavaScriptCore/JavaScriptCore.h>做交互
创建一个ViewController,在.h文件中创建JSContext对象,

@property (nonatomic, strong) JSContext *jsContext;

写一个自定义协议,协议中要实现的方法是HTML页面中点击触发方法

@protocol JSObjectiveCDelegate <JSExport>
- (void)getMessage:(NSString *)user :(NSString *)psw;
//此方法就是HTML代码中的约定方法;

创建一个js模型,通过模型调用方法更简便

@interface JsObjCModel : NSObject <JSObjectiveCDelegate>

@property (nonatomic, weak) JSContext *jsContext;

在.m中调用webView的一个协议方法

- (void)webViewDidFinishLoad:(UIWebView *)webView{
  //    [webView stringByEvaluatingJavaScriptFromString:@"OCModel.callSystemCamera()"];
  self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
  // 通过模型调用方法,这种方式更好些。
  JsObjCModel *model  = [[JsObjCModel alloc] init];
  self.jsContext[@"jsObject"] = model;//这里的@"jsObject"是HTML代码中的js对象,注意保持一致
  model.jsContext = self.jsContext;
  model.webView = _web;
  self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
      context.exception = exceptionValue;
      NSLog(@"异常信息:%@", exceptionValue);
  };
}

这是HTML代码中的约定方法

 <script>
            function logIn(){
                var logName = $("#u").val();
                var logPass = $("#p").val();
                var logObj = jsObject.getMessage(logName,logPass);
            }

</script>

在.m中加入js模型,调用方法

@implementation JsObjCModel
- (void)getMessage:(NSString *)signName :(NSString *)signPass
{
//在这里写代码,实现你的数据交互就可以了;
}

注意:这个方法虽然是在ViewController.m中写的,但是这是一个单独的类,它不具有ViewController的属性,所以有关于view的方法及属性都是用不了的,这时可以添加通知解决。

相关文章

网友评论

      本文标题:iOS与HTML交互

      本文链接:https://www.haomeiwen.com/subject/ysvgittx.html