2013-02-26 54 views
1

我正在尝试在iPhone和iPad之间切换uiwebview的用户代理。所以要有一个从iPad用户代理改变为iPhone用户代理并向后改变的按钮。多次更改用户代理

我发现这个链接:http://www.mphweb.com/en/blog/easily-set-user-agent-uiwebview

不幸的是,用户代理只能更改一次,即使我重新创建一个UIWebView。

有没有人有关于如何做的想法?

顺便说一句,我也尝试在urlrequest头设置用户代理,没有成功。

谢谢

+0

“用户代理只能更改一次,即使我重新创建了uiwebview。” - 如果你在创建两个webviews之间重新设置'NSUserDefaults'中的值?这似乎适用于那个评论该帖子的人。 – 2013-02-26 20:43:28

+0

更新:似乎用户代理可以通过重置NSUserDefaults值多次更改,但只能在设备上,而不能在模拟器上更改。 – user1175019 2013-03-28 10:55:01

回答

1

我也是,我一直只能设置UserAgent一次。然后我不能再改变它了。我尝试了模拟器和设备。同样的麻烦。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSDictionary *dictionary = @{@"UserAgent" : @"MyOWnUserAgent_2"}; 
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; 
} 

我不使用网络浏览量。我只是打电话一样:

NSURLSession *session = [NSURLSession sharedSession]; 
[[session dataTaskWithURL:[NSURL URLWithString:urlRequest] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) 

我打扫,从设备中删除应用程序,我重修,我退出,重新启动,重建......的问题仍然存在。我在OS X 10.11.5(15F34)上运行XCode 7.3(7D175),并针对Deploymen Target iOS 9.1,Base SDK iOS 9.3构建。 任何线索?

0

试试这个

static void appendUA(NSString *uaStr) { 
    if (!uaStr) 
     return; 

    UIWebView *tempWebView = [[UIWebView alloc] initWithFrame:CGRectZero]; 
    NSString *secretAgent = [tempWebView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]; 
    secretAgent = [secretAgent stringByAppendingString:uaStr]; 
    NSDictionary<NSString *, id> *domain = [[NSUserDefaults standardUserDefaults] volatileDomainForName:NSRegistrationDomain]; 
    if (domain) { 
     NSMutableDictionary<NSString *, id> *newDomain = [domain mutableCopy]; 
     [newDomain setObject:secretAgent forKey:@"UserAgent"]; 
     domain = newDomain; 
    } else { 
     domain = [[NSDictionary alloc] 
        initWithObjectsAndKeys:secretAgent, @"UserAgent", nil]; 
    } 

    [[NSUserDefaults standardUserDefaults] removeVolatileDomainForName:NSRegistrationDomain]; 
    [[NSUserDefaults standardUserDefaults] setVolatileDomain:domain forName:NSRegistrationDomain]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

你应该调用这个函数之前创建WKWebview/UIWebView中,和空间是自动添加。

appendUA(@" ====TEST_UA===="); 
    WKWebView *wkWebView = [WKWebView new]; 
    //...