Chrome Packaged App - Установить пользовательский агент пользователя - PullRequest
0 голосов
/ 09 мая 2019

У меня есть опубликованное гибридное приложение, которое доступно на 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 программно, использовать его для настройки пользовательского агента, а затем отключить. Я не хотел бы оставлять отладчик подключенным с точки зрения безопасности.

Спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...