Change Phonegap User Agent

后端 未结 6 1988
独厮守ぢ
独厮守ぢ 2020-12-08 17:30

My Phonegap application is allowed to browse to some external sites that also use the Phonegap API. Currently I am conditionally including the Phonegap javascript based on

相关标签:
6条回答
  • 2020-12-08 17:52

    This answer to a similar question also mentions a preference available in current Cordova versions:

    <preference name="OverrideUserAgent" value="MyCordovaApp/1.2.3" />
    

    It is documented for Android and iOS.

    0 讨论(0)
  • 2020-12-08 17:57

    If you're still looking for a quick solution for that one, this is how I achieved it:

    // Modify the user-agent
    NSString* suffixUA = @" my nice user-agent suffix";
    UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectZero]; 
    NSString* defaultUA = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
    NSString* finalUA = [defaultUA stringByAppendingString:suffixUA];
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:finalUA, @"UserAgent", nil];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
    

    In the Phonegap (Cordova) sample app, you need to add these lines in the didFinishLaunchingWithOptions method of AppDelegate.m

    I spent an entire day trying to figure this one out! I'm sure it could be useful to other people.

    0 讨论(0)
  • 2020-12-08 18:04

    If you're looking for a more powerful http client for cordova that allows changing the user agent, or any header in that matter, try out https://github.com/aporat/cordova-plugin-fetch. it wraps around well tested native networking libraries (AFNetworking 2 on ios, and OKHttp on android).

    it also follows the window.fetch, so you could use cordovaFetch on the simulators and devices, while testing on the browser with fetch.js.

    Just install the plugin with

    cordova plugin add https://github.com/aporat/cordova-plugin-fetch.git

    and include the user agent header in any request you made.

    cordovaFetch('/users.json', {
      method : 'GET',
      headers: {
       'User-Agent': 'your user agent'
     },
    })
    
    0 讨论(0)
  • 2020-12-08 18:05

    I couldn't get this to work in iOS using Cordova 3.3, presumably because of CB-2520 but, as a hack, I modified CDVViewController.h to make the userAgent property readwrite, and then simply updated self.userAgent in the viewDidLoad of my controller that inherits from CDVViewController.

    If timing is an issue, you could forcibly manipulate the userAgent lazy-loaded property in CDVViewController.m.

    Both of these are very dirty. :)

    0 讨论(0)
  • 2020-12-08 18:17

    CB-2520 was resolved, which proposed allowing the user-agent string to be modified. You can achieve this now by setting the baseUserAgent property of the MainViewController. For a simple test, you can add the following to the didFinishLaunchingWithOptions method of the AppDelegate.m, after the MainViewController is initialized:

    self.viewController.baseUserAgent = @"My Custom User Agent";

    0 讨论(0)
  • 2020-12-08 18:17

    See this question: Detect between a mobile browser or a PhoneGap application

    I made a contribution but there are plenty of answers which may be suitable for you.

    0 讨论(0)
提交回复
热议问题