我有一个已发布的混合应用程序,可在IOS,Android和Chrome网上应用店的左侧找到该应用程序。 Chrome版本也是使用NWJS构建的MacOS和Windows版本的基础。
在为该应用程序开发一些新功能时,我遇到了需要在直接XMLHttpRequest的客户端代码到第三方站点中自定义用户代理标头的需求。我认为这很容易,我要做的就是将应用程序名称添加到现有navigator.userAgent的末尾。
我不能再错了。这导致拒绝设置不安全的标头。鉴于您可以使用Chrome调试器设置任何所需的用户代理,这对我来说似乎很奇怪。
对于IOS,我发现可以在IOS包装器中放置一些Objective C代码,如下所示:
// get original UserAgent string by using temporal UIWebView
UIWebView *tmp = [[UIWebView alloc] init];
NSString *originalUA = [tmp stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
// create custom UserAgent string
NSString *customUA = [NSString stringWithFormat:@"%@ %@", originalUA, @" WebViewApp myAppName/myAppVersion"];
// set custom UserAgent as default
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:customUA , @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
,对于Android,包装器中包含一些Java代码,类似于:
string ua = webview.getSettings().getUserAgentString();
webview.getSettings().setUserAgentString(ua+" WebViewApp myAppName/myAppVersion");
这两种方法都可以正常工作。
我认为我可以使用chrome webRequest API在Chrome应用中通过每次更改实际的XHR标头来实现相同的功能,而不是在IOS和Android中使用更简单的方法,但是我发现此API仅可用chrome扩展程序而不是chrome打包的应用程序。
几年前,有人在这里问过类似的问题,但从未得到回答。现在有没有人有任何关于如何从Chrome打包应用程序内部更改所有XHR请求的用户代理的建议,或者我是否需要通过服务器引导这些请求。 跳出框框思考,我可以以编程方式连接Chrome调试器,使用它来设置用户代理,然后分离。我不愿从安全角度保留调试器。
感谢您的帮助。