我的Phonegap应用程序可以浏览到一些也使用Phonegap API的外部网站。目前我有条件地包括Phonegap javascript基于你在哪个平台(Android,iOS等)。但是,我无法区分Phonegap应用程序与移动设备上的常规浏览器之间的区别。有没有办法在我的Phonegap应用程序中更改用户代理,以便为我的服务器提供有关此内容的提示?
最感兴趣的iOS解决方案。
答案 0 :(得分:18)
如果您仍然在寻找快速解决方案,那么我就是这样做的:
// 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 方法中添加这些行
我花了一整天的时间试图弄明白这个!我确信它对其他人有用。
答案 1 :(得分:6)
CB-2520已解决,建议允许修改用户代理字符串。您现在可以通过设置MainViewController的 baseUserAgent 属性来实现此目的。对于简单的测试,您可以在初始化MainViewController之后将以下内容添加到 AppDelegate.m 的 didFinishLaunchingWithOptions 方法中:
self.viewController.baseUserAgent = @"My Custom User Agent";
答案 2 :(得分:6)
This answer对类似的问题也提到了当前Cordova版本中的首选项:
<preference name="OverrideUserAgent" value="MyCordovaApp/1.2.3" />
答案 3 :(得分:3)
如果您正在为cordova寻找更强大的http客户端,允许更改用户代理或任何标题,请尝试https://github.com/aporat/cordova-plugin-fetch。它包含经过良好测试的本机网络库(ios上的AFNetworking 2
和android上的OKHttp
。)
它也跟在window.fetch之后,因此您可以在模拟器和设备上使用cordovaFetch
,同时使用fetch.js
在浏览器上进行测试。
只需使用
安装插件即可 cordova plugin add https://github.com/aporat/cordova-plugin-fetch.git
并在您提出的任何请求中包含用户代理标头。
cordovaFetch('/users.json', {
method : 'GET',
headers: {
'User-Agent': 'your user agent'
},
})
答案 4 :(得分:0)
请参阅此问题:Detect between a mobile browser or a PhoneGap application
我做出了贡献,但有很多答案可能适合你。
答案 5 :(得分:0)
我无法使用Cordova 3.3在iOS中工作,可能是因为CB-2520但是,作为一个黑客,我修改了CDVViewController
。h以使userAgent
属性读写,然后简单地更新我的控制器的viewDidLoad
中继承自CDVViewController
的self.userAgent。
如果时间问题,您可以强行操纵userAgent
中的CDVViewController.m
延迟加载属性。
这两个都很脏。 :)