iOS 原生控件和HTML5的交互
来源:互联网 发布:淘宝订单处理 编辑:程序博客网 时间:2024/05/21 10:27
其实在写这篇文章的时候也不是特别的明白,还是有点模糊的,但是我写出来梳理一下思路,也可以为别人提供一下借鉴。
在iOS 开发中用到网页就必须知道UIWebView。下面先介绍一下UIWebView
UIWebView *webView = [[UIWebViewalloc]initWithFrame:[UIScreenmainScreen].bounds];
webView.backgroundColor = [UIColorwhiteColor];
webView.delegate =self;
[webView loadRequest:[NSURLRequestrequestWithURL:[NSURLURLWithString:@"https://www.baidu.com"]]];
[self.viewaddSubview:webView];
遵守UIWebView的代理 UIWebViewDelegate 代理里有四个方法:
// 每次加载网页都会调用
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
NSString *strUrl = request.URL.absoluteString;//在这个方法里可以获取每次刷新网页的绝对字符串,可以根据字符串进行你需要的操作。
}
// 网页开始加载
- (void)webViewDidStartLoad:(UIWebView *)webView;
// 网页加载完成
- (void)webViewDidFinishLoad:(UIWebView *)webView;
// 网页加载错误
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullableNSError *)error;
// ---------------------- 开始代码实现监听网页内容 ------------------------
在@interface 接口文件里添加属性
@property (nonatomic,strong)JSContext *context;
在头文件导入 #import <JavaScriptCore/JavaScriptCore.h>// 在网页加载完成的代理方法里实现
-(void)webViewDidFinishLoad:(UIWebView *)webView{
//以 html的title为导航栏的 title
self.title = [webViewstringByEvaluatingJavaScriptFromString:@"document.title"];
//监听整个js里面的内容
self.context = [webViewvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//打印异常
self.context.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue){
NSLog(@"%@",exceptionValue);
};
// 以 block的形式要避免循环引用 object
__blocktypeof(self) loginview =self;
self.context[@"starupLogin"] = ^(NSString *str){// @"starupLogin" 这是网页和iOS端开发约定的字段,一旦发现就触发方法
[[NSOperationQueuemainQueue]addOperationWithBlock:^{
[loginview login]; // 在 - (void)login{} 方法里实现调用原生控件的登录操作。
}];
};
}
// 在上面实现网页和原生控件的交互,但是在实际的开发中我们会遇到点击网页控件会刷新网页,在我们返回的时候可能需要返回网页刷新后的上一页,这个时候我们就不能仅仅操作原生控件返回了,因为webView还是同一个,只是网页刷新了。在这里 OC语言给我们封装好了方法我们只用直接调用就可以了。
if (webView.canGoBack) {
[webViewgoBack];
}else{
[self.navigationControllerpopViewControllerAnimated:YES];
}
// canGoForward 是否可以前进,如果返回YES则可以前进,如果返回NO则不可以前进;调用[webView goForward]方法进入到上次返回的页面。
- iOS 原生控件和HTML5的交互
- iOS原生和h5的交互
- iOS和html5交互遇到的问题
- Android原生页面同Html5的交互
- Android原生代码与HTML5的交互
- React Native和原生iOS Objective-C的交互解决方案
- 关于iOS原生和react-native的交互
- iOS使用UIWebView和原生交互
- 使用jsBridge和原生IOS、Android交互
- Unity和iOS原生界面交互示例
- 说说ios原生和H5交互
- React Native和iOS原生方法交互
- iOS与HTML5的交互
- iOS与Html5和JS之间的交互---学习笔记
- 关于Unity3D(4.7和5.3.4)与IOS原生Object-C交互,调用IOS原生UIImagePickerController的问题
- JS&iOS原生交互
- Webview和Html5的交互
- WebView和html5 的交互
- ibatis实现Iterate的使用 ibatis里面in的实现
- H264基本概念之 宏块、片和片组
- 第三章 服务和广播
- Button不可用时颜色为灰色
- 关于listview的使用
- iOS 原生控件和HTML5的交互
- tomcat jvm性能调优
- SpringMVC的JSON实现
- web前端之google地图的封装 var mapConfigUrl = "TzxMap/TzxMapBaseInfoJson.txt"; var mapType = "goo
- 追踪oracle执行sql情况
- Java设计模式-单例模式
- hdu 3336
- kafka生产者、消费者java示例
- [C#]结构体和类的区别