[iOS开发笔记] webview加载+JS交互
来源:互联网 发布:java还能火几年 编辑:程序博客网 时间:2024/06/14 02:33
优势:
1:加载进度展示自定义
2:可动态获取web页面设置的title,无限复用
3:js交互全部可在此处设置
(适用于新手,大神直接略过)
话不多说,直接代码撸起---
#import "PostPersionMsgController.h"
#import <WebKit/WebKit.h>
#import <JavaScriptCore/JavaScriptCore.h>
@interface PostPersionMsgController ()<WKNavigationDelegate,WKUIDelegate,WKScriptMessageHandler>//WKUIDelegate:wkwebview的代理,WKScriptMessageHandler:JS交互代理
@property (nonatomic,strong)WKWebView *webView;
//进度条
@property (nonatomic,strong)UIProgressView *progressView;
//URL
@property (nonatomic,copy)NSString *requrst_URL;
@end
@implementation PostPersionMsgController
- (void)viewDidLoad {
[superviewDidLoad];
[selfcreateUI];
}
- (void)viewDidAppear:(BOOL)animated {
[superviewDidAppear:animated];
}
- (void)createUI {
// _requrst_URL = @"https://www.baidu.com";
_requrst_URL = [NSStringstringWithFormat:requrst_URL];
WKWebViewConfiguration *config = [[WKWebViewConfigurationalloc]init];
_webView = [[WKWebViewalloc]initWithFrame:[UIScreenmainScreen].boundsconfiguration:config];
//设置代理
_webView.navigationDelegate =self;
_webView.UIDelegate =self;
_webView.backgroundColor = [UIColorwhiteColor];
[_webView.configuration.userContentControlleraddScriptMessageHandler:selfname:@"JavaScript"];
NSURL *url = [NSURLURLWithString:_requrst_URL];
NSURLRequest *requset = [NSURLRequestrequestWithURL:url];
[_webViewloadRequest:requset];
//监听进度条
[_webViewaddObserver:selfforKeyPath:@"estimatedProgress"options:NSKeyValueObservingOptionNewcontext:nil];
_progressView = [[UIProgressViewalloc]init];
_progressView.transform =CGAffineTransformMakeScale(1.0,2.0);
_progressView.trackTintColor = [UIColorwhiteColor];
_progressView.progressTintColor = [UIColororangeColor];
[self.viewsd_addSubviews:@[_webView,_progressView]];
self.view.backgroundColor = [UIColorwhiteColor];
//layout
_topProgressView.sd_layout
.centerXEqualToView(self.view)
.topSpaceToView(self.view,64)
.widthIs(SCREEN_WIDTH -40)
.heightIs(100);
_webView.sd_layout
.centerXEqualToView(self.view)
.widthIs(SCREEN_WIDTH)
.topSpaceToView(_topProgressView,10)
.heightIs(SCREEN_HEIGHT -110 -64);
_progressView.sd_layout
.topSpaceToView(self.view,64)
.widthIs(SCREEN_WIDTH)
.centerXEqualToView(self.view)
.heightIs(1);
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPathisEqualToString:@"estimatedProgress"]) {
if (_webView.estimatedProgress ==1) {
_progressView.hidden =YES;
}
[_progressViewsetProgress:(CGFloat)_webView.estimatedProgressanimated:YES];
NSLog(@"%f",(CGFloat)_webView.estimatedProgress);
}
}
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
NSLog(@"开始加载");
}
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
NSLog(@"加载完成");
//自适应标题
self.navigationItem.title =_webView.title;
}
- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error {
NSLog(@"加载失败");
}
#pragma mark - WKScriptMessageHandler
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
if ([message.nameisEqualToString:@"JavaScript"]) {
NSLog(@"点击需要交互的操作");
}
}
//移除通知
- (void)dealloc {
[_webViewremoveObserver:selfforKeyPath:@"estimatedProgress"];
[_progressViewreloadInputViews];
[_webView.configuration.userContentControllerremoveScriptMessageHandlerForName:@"JavaScript"];
}
@end
一直想好好写点博客,奈何程序狗的时间都不是自己的,今天关于webview的博客,希望能帮到刚入门的iosr。
- [iOS开发笔记] webview加载+JS交互
- iOS开发,webView加载图片, js交互, 点击图片放大
- iOS开发-WebView与JS的交互
- iOS WebView JS 交互
- iOS开发 ----- webView和JS的简单交互
- iOS webview 和 js 交互
- iOS webView 与js交互
- iOS webView与js交互
- iOS WebView中的JS交互
- WebView加载html后的JS交互
- iOS笔记 js 交互
- iOS【webView 加载微信文章注入JS实现交互 浏览图片及保存】
- ios webview与JS的交互
- iOS解析---WebView和js交互原理
- iOS解析---WebView和js交互原理
- iOS 之webView与js交互
- iOS解析---WebView和js交互原理
- iOS webView和JS简单交互处理
- opencv3.31+contrib3.31配置体验
- JVM锁
- 第三周 项目3 求集合并集
- SpringMVC 406
- 开源grafana可视化监控+influxdb
- [iOS开发笔记] webview加载+JS交互
- shell 脚本编程学习(七) 信号和数组
- 支付宝开发平台之第三方授权登录与获取用户信息
- 第14周【项目2
- PowerDesigner逆向工程导入MYSQL数据库总结
- caffe在linux下绘制训练时的loss曲线
- 第14周项目2- 大数据集上排序算法性能的体验
- 将用户密码变为md5值保存在数据库
- Redis的简单介绍及安装