美文网首页
iOS WebView

iOS WebView

作者: Monkey_hbh | 来源:发表于2017-06-27 13:34 被阅读264次

需求

原生APP嵌套H5界面,要区分打开H5是在本地APP还是在手机浏览器,前端伙伴说需要配合修改默认的 UserAgent,以便区分。
在iOS8之前大家一直用的都是UIWebView,但是都知道,在iOS9出了一个WKWebView,对比起来前者UIWebview就具有严重的内存问题,所以以后UIWebView会被慢慢替代。这里主要讲讲WKWebView怎么修改UserAgent。

方法一

此方法版本都兼容,因为uiwebview和wkwebView代理相同,不知道以后会不会出现变化,所以怕以后留坑

    UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
      //防止多个
    if (![userAgent containsString:@"yourUserAgent"]) {
        NSString *newUserAgent = [userAgent stringByAppendingString:@" yourUserAgent"];
        NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
        [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    }

方法二

此方法只能在ios9以上修改才能成功

//
    [self.homeBannerWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
        NSString *oldAgent = result;
        if (![oldAgent containsString:@"yourUserAgent"]) {
//            // 给User-Agent添加额外的信息
            NSString *newAgent = [NSString stringWithFormat:@"%@;%@", oldAgent, @"yourUserAgent"];
            // 设置global User-Agent
            [[NSUserDefaults standardUserDefaults] synchronize];
            NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newAgent, @"UserAgent", nil];
            [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
            [self.homeBannerWebView setCustomUserAgent:newAgent]; //iOS9出来的方法
            
        }
        
    }];

方法三

和前端商量一下,让前端传个参数专门识别iOS,让前端调用原生iOS方法,或者iOS调用前端的方法都可以

关注这个设置UserAgent 还没有找到一个通过修改WKWebview而又适配iOS8的,如果有不对的地方麻烦指点一二

相关文章

网友评论

      本文标题: iOS WebView

      本文链接:https://www.haomeiwen.com/subject/yvxvzttx.html