У меня есть опубликованное гибридное приложение, которое доступно на IOS, Android и в том, что осталось от Chrome Web Store. Версия Chrome также является основой для версий MacOS и Windows, созданных с использованием NWJS.
При разработке некоторых новых функций для этого приложения я столкнулся с необходимостью настроить заголовок пользовательского агента в прямом XMLHttpRequest от кода клиента до стороннего сайта. Я думал, что это будет легко, все, что я хотел сделать, это добавить имя приложения в конец существующего navigator.userAgent.
Я не мог быть более неправым. Это приводит к отказу устанавливать небезопасные заголовки. Учитывая, что с помощью отладчика Chrome вы можете установить любой пользовательский агент, который вам нужен, это кажется мне очень странным.
Для IOS я обнаружил, что могу поместить некоторый код Objective C в оболочку IOS следующим образом:
// 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");
и оба эти подхода работают нормально.
Я подумал, что мог бы использовать API chrome webRequest для достижения того же в приложении Chrome, каждый раз меняя фактические заголовки XHR, а не более простой подход, используемый в IOS и Android, но я обнаружил, что этот API доступен только к расширениям Chrome, а не к пакетным приложениям Chrome
Кто-то еще задавал подобный вопрос здесь несколько лет назад, но на него никогда не отвечали. Кто-нибудь уже получил какие-либо предложения о том, как изменить пользовательский агент для всех запросов XHR из упакованного приложения Chrome, или мне нужно направить эти запросы через сервер.
Думая нестандартно, могу ли я подключить отладчик Chrome программно, использовать его для настройки пользовательского агента, а затем отключить. Я не хотел бы оставлять отладчик подключенным с точки зрения безопасности.
Спасибо за любую помощь.