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