html5封装app ios保持登录状态,iOS 封装js方法与Html5交互源码

该博客详细介绍了在iOS应用中如何使用UIWebView加载网页内容,并实现了与JavaScript的交互功能,包括获取访问令牌、检查网络状态以及视频缓存的方法。在`webViewDidStartLoad`和`webViewDidFinishLoad`代理方法中处理页面加载的开始和结束,同时在JavaScript上下文中定义了多个回调函数,以便于App和网页之间的数据交换。
摘要由CSDN通过智能技术生成

#import

"ZrExamTrainDetailViewController.h"

#import

"CheckNetwork.h"

#import

< JavaScriptCore/JavaScriptCore.h >

@interface

ZrExamTrainDetailViewController ()

@property (nonatomic,strong)

UIWebView

*mWeb;

@property (nonatomic,strong)

UIActivityIndicatorView

*activityView;

@end

@implementation

ZrExamTrainDetailViewController

- (void)viewDidLoad

{

[super

viewDidLoad];

[self

initWeb];

[self

initActivity];

[self.navigationItem.leftBarButtonItem

setAction:@selector(goback)];

}

-(void)initWeb

{

_mWeb

=

[[UIWebView

alloc]

initWithFrame:CGRectMake(0,

0,

MAIN_WIDTH,

MAIN_HEIGHT-64)];

NSURL

*url = [NSURL

URLWithString:self.string];

// NSURL *url = [NSURL URLWithString:[NSString

stringWithFormat:@"%@examcourse/coursedetail?id=2&accessToken=%@",JC_SERVER_CLIENT,[LoginUserUtil

accessToken]]];

[_mWeb

loadRequest:[NSURLRequest

requestWithURL:url]];

_mWeb.backgroundColor

=

[UIColor

clearColor];

_mWeb.scrollView.bounces

=

NO;

_mWeb.scalesPageToFit

=

YES;

_mWeb.delegate

= self;

[self.view

addSubview:_mWeb];

}

-(void)initActivity

{

self.activityView

=

[[UIActivityIndicatorView

alloc]

initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];

self.activityView.frame

= CGRectMake(MAIN_WIDTH/2-20,

MAIN_HEIGHT/3,

40,

40);

[self.view

addSubview:self.activityView];

}

#pragma mark -------------------

UIWebview delegate---------------------------------

- (void)webViewDidStartLoad:(UIWebView

*)webView

{

[self.activityView

startAnimating];

//[self configJSContext];

}

- (void)webViewDidFinishLoad:(UIWebView

*)webView

{

NSString

*js = [NSString

stringWithFormat:@"getToken('%@')",[LoginUserUtil

accessToken]];

[_mWeb

stringByEvaluatingJavaScriptFromString:js];

BOOL

isWifi

= [CheckNetwork

checkNetworkStatusWhetherOrNotWifi];

[webView

stringByEvaluatingJavaScriptFromString:[NSString

stringWithFormat:@"pupWindeowByWifi(%d)",isWifi]];

[self.activityView

stopAnimating];

}

- (void)goback

{

if

(![_mWeb.request.URL.relativeString

containsString:self.string])

{

[_mWeb

goBack];

}

else

{

[self.navigationController

popViewControllerAnimated:YES];

}

}

-(void)configJSContext

{

JSContext

*context

= [_mWeb

valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

// 判断是否WiFi状态

context[@"isWifi"]

= ^() {

NSLog(@"+++++++Begin

Log+++++++");

NSArray

*args = [JSContext

currentArguments];

//

js传递的参数

for

(JSValue

*jsVal in

args) {

NSLog(@"%@",

jsVal);

}

JSValue

*this = [JSContext

currentThis];

NSLog(@"this:

%@",this);

BOOL

isWifi

= [CheckNetwork

checkNetworkStatusWhetherOrNotWifi];

int

ret = isWifi == YES

? 1

: 0;

NSLog(@"-------End

Log-------");

return

ret;

};

// 向Html传递Token

context[@"getAccessToken"]

= ^() {

NSLog(@"+++++++Begin

Log+++++++");

NSArray

*args = [JSContext

currentArguments];

//

js传递的参数

for

(JSValue

*jsVal in

args) {

NSLog(@"%@",

jsVal);

}

JSValue

*this = [JSContext

currentThis];

NSLog(@"this:

%@",this);

NSString

*token = [LoginUserUtil

accessToken];

NSLog(@"-------End

Log-------");

return

token;

};

context[@"videoCache"]

= ^() {//'%@', '%@', '%@', '%@','%@', '%@', '%@'

NSLog(@"+++++++Begin

Log+++++++");

NSArray

*args = [JSContext

currentArguments];

//

js传递的参数

//

存放js参数

NSMutableArray *parmArr

= [[NSMutableArray alloc]

init];

for

(JSValue

*jsVal in

args) {

NSLog(@"%@",

jsVal);

[parmArr addObject:[CommonUtil

string:jsVal]];

}

JSValue

*this = [JSContext

currentThis];

NSLog(@"this:

%@",this);

NSString

*picUrl

= [CommonUtil

stringCombine:@"picture/cover/"

string:parmArr[6]];

[self

videoCache:parmArr[0]

mp4:parmArr[1]

filename:parmArr[2]

contentLength:parmArr[3]

videolength:parmArr[4]provider:parmArr[5]

picurl:picUrl];

NSLog(@"-------End

Log-------");

};

}

-(BOOL)webView:(UIWebView

*)webView shouldStartLoadWithRequest:(NSURLRequest

*)request navigationType:(UIWebViewNavigationType)navigationType

{

dispatch_after(dispatch_time(DISPATCH_TIME_NOW,

(int64_t)(0.8

*

NSEC_PER_SEC)),

dispatch_get_main_queue(),

^{

[self

configJSContext];

});

return YES;

}

- (void)webView:(UIWebView

*)webView didFailLoadWithError:(NSError

*)error {

NetworkErrorViewController *errorVC

= [NetworkErrorViewController new];

[self.navigationController

pushViewController:errorVC

animated:YES];

NSLog(@"Error:%@\nwebview载入失败",error.userInfo);

}

- (void)videoCache:(NSString

*)url mp4:(NSString

*)mp4 filename:(NSString

*)filename contentLength:(NSString

*)contentLength videolength:(NSString

*)videolength provider:(NSString

*)provider picurl:(NSString

*)picurl {

if

(!url) { return;

}

if

([url isEqualToString:@""])

{

[PubllicMaskViewHelper

showTipViewWith:@"无播放资源"

inSuperView:self.view

withDuration:1];

return;

}

// 构造字典

视频详情参数

NSMutableDictionary *info

= [[NSMutableDictionary alloc]

init];

[info setValue:url

forKey:@"url"];

[info setValue:mp4

forKey:@"type"];

[info setValue:filename

forKey:@"name"];

[info setValue:provider

forKey:@"provider"];

[info setValue:contentLength

forKey:@"size"];

[info setValue:picurl

forKey:@"cover"];

BOOL

isExist

= [[CacheHelper

shareInstance]

isExistInSqlite:info];

if

(isExist == YES)

{

[PubllicMaskViewHelper

showTipViewWith:@"已缓存"

inSuperView:self.view

withDuration:1];

}

else{

[[CacheHelper

instance:info]

show];

}

}

@end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值