更改Phonegap用户代理

我的Phonegap应用程序被允许浏览到一些也使用Phonegap API的外部网站。 目前我有条件地包括基于你在哪个平台(Android,iOS等)Phonegap的JavaScript。 但是,我无法区分Phonegap应用程序和移动设备上的常规浏览器。 有没有办法改变我的PhoneGap应用程序中的用户代理给我的服务器一个暗示呢?

最感兴趣的是iOS解决scheme。

对类似问题的回答也提到目前cordova版本中可用的偏好:

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

这是为Android和iOSlogging 。

如果你仍然在寻找一个快速的解决scheme,那么我就是这样做的:

 // 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]; 

在Phonegap(Cordova)示例应用程序中,您需要在AppDelegate.m的didFinishLaunchingWithOptions方法中添加这些行

我花了整整一天的时间,试图找出这一个! 我相信这可能对其他人有用。

CB-2520已经解决,build议允许用户代理string被修改。 现在可以通过设置MainViewController的baseUserAgent属性来实现这一点。 对于一个简单的testing,在初始化MainViewController之后,可以将以下内容添加到AppDelegate.m的didFinishLaunchingWithOptions方法中:

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

如果你正在寻找一个function更强大的http客户端,可以更改用户代理或任何标题,请尝试https://github.com/aporat/cordova-plugin-fetch 。 它包装经过良好testing的本地networking库( AFNetworking 2上的AFNetworking 2OKHttp上的OKHttp )。

它也遵循window.fetch,所以你可以在模拟器和设备上使用cordovaFetch ,同时在浏览器上用fetch.js进行testing。

只需安装插件

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

并在您提出的任何请求中包含用户代理标题。

 cordovaFetch('/users.json', { method : 'GET', headers: { 'User-Agent': 'your user agent' }, }) 

看到这个问题: 在移动浏览器或PhoneGap应用程序之间进行检测

我做了一个贡献,但有很多答案可能适合你。

我无法得到这个工作在iOS使用cordova3.3,大概是因为CB-2520,但作为一个黑客,我修改CDVViewController .h使userAgent属性读写,然后简单地更新我的viewDidLoad self.userAgent从CDVViewControllerinheritance的控制器。

如果计时是一个问题,您可以强制操作CDVViewController.muserAgent lazy-loaded属性。

这两个都很脏。 🙂