Chrome打包的应用-设置自定义用户代理

时间:2019-05-09 18:05:16

标签: google-chrome-app user-agent

我有一个已发布的混合应用程序,可在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调试器,使用它来设置用户代理,然后分离。我不愿从安全角度保留调试器。

感谢您的帮助。

0 个答案:

没有答案