您的位置:首页 > 移动开发

js oc 交互 更改UIWeb UserAgent 判断游览器 还是 app UIWebview

2016-09-23 10:38 741 查看
1 最近项目在与H5 交互的时候 对方需要判断 打开网页的方式时游览器 还是原生app UIWebView

2 决解办法

(1)传值 js 调取方法

js方法

/*请求点击次数*/
//              if(isAndroid){//android终端的调用方法
//              }else if(isiOS){//IOS终端的方法
//                  return document.location = "objc:/" + 'isApp';
//              }


但是Js无法拿到 app端返回的值 并且不会执行后面的方法

(2)js 调取app方法 app在调js的方法 返回值

这个方法 虽然看似 有点傻 但是 还是实现了

但是不符合开发的要求   时间上太慢了
页面加载完了 才会生效   这样 js 已完成了所有的求情
这个方法也不可行


(3)做 内核标识 就是更改 navigator.userAgent

(1)注意单个更改UIWebView的UA  会出现第一次无法拿到修改后的ua 以后每次请求时 更改的UA会出现重复的添加  最后将其修改方法放在了


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {}


中 就完美的实现了

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
NSString *oldAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSLog(@"old agent :%@", oldAgent);

//添加新的UserAgent
NSString *newAgent = [oldAgent stringByAppendingString:@"/(加上商定好的标记)"];
NSLog(@"new agent :%@", newAgent);

//保存添加后的UserAgent
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];


效果就是这样的 这样js就知道 请求来之 网页 还是 app

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: