2013-02-26 72 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]; 
    //...