Полностью удалить Android как ОС из агента WebView - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть веб-просмотр в моем родном приложении для Android, и мне нужно установить agent для исправления вида рабочего стола на некоторых веб-сайтах, которые проверяют наличие агента Android с помощью javascript

Код JavaScript:

if (navigator.userAgent.indexOf("Android") != -1) {
    //do something
}

на стороне Android Я попытался установить агент следующим образом

public void setDesktopMode(WebView webView, boolean enabled) {
    String newUserAgent = webView.getSettings().getUserAgentString();
    if (enabled) {
        try {
            String ua = webView.getSettings().getUserAgentString();
            String androidOSString = webView.getSettings().getUserAgentString().substring(ua.indexOf("("), ua.indexOf(")") + 1);
            newUserAgent = webView.getSettings().getUserAgentString().replace(androidOSString, "(X11; Linux x86_64)");
        } catch (Exception e) {
            e.printStackTrace();
        }
    } else {
        newUserAgent = null;
    }

    webView.getSettings().setUserAgentString(newUserAgent);
    webView.getSettings().setUseWideViewPort(enabled);
    webView.getSettings().setLoadWithOverviewMode(enabled);
    webView.reload();
}

, однако на веб-сайте есть некоторые перенаправления на внешние сайты.после регистрации заголовка от WebView я заметил, что в некоторых из этих перенаправлений агент установлен как android, что вызывает некоторые проблемы с макетом и поведением веб-сайта.

Журнал заголовка запроса WebView:

request.getRequestHeaders()::{Origin=null, User-Agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36, Accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8, Upgrade-Insecure-Requests=1, Content-Type=application/x-www-form-urlencoded}
request.getMethod()::POST
request.getUrl()::https://www.example.com/tt.jsp
request.getRequestHeaders()::{Origin=https://www.example.com, User-Agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36, Referer=https://www.example.com/tt.jsp, Accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8, Upgrade-Insecure-Requests=1, Content-Type=application/x-www-form-urlencoded}
request.getMethod()::POST
request.getUrl()::https://www.example2.com/tt2.do
request.getRequestHeaders()::{User-Agent=Mozilla/5.0 (Linux; Android 8.0.0; SM-G955F Build/R16NW; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36, Accept=image/webp,image/apng,image/*,*/*;q=0.8, Referer=https://www.example.com/tt.jsp}
request.getMethod()::GET
request.getUrl()::https://www.example.com/favicon.ico
request.getRequestHeaders()::{User-Agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36, Accept=*/*, Referer=https://www.example2.com/}
request.getRequestHeaders()::{User-Agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36, Accept=text/css,*/*;q=0.1, Referer=https://www.example2.com/}
request.getMethod()::GET
request.getRequestHeaders()::{User-Agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36, Accept=text/css,*/*;q=0.1, Referer=https://www.example2.com/}
request.getUrl()::https://www.example2.com/css.css

Как я могу убедиться, что агент Webview не показывает Android как ОС в User-Agent?как вы можете видеть в одном из перенаправлений, показанных в журналах, он показывает android как user-agent OS

ОБНОВЛЕНИЕ: Я пытался использовать webView.getSettings().setUserAgentString("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/69.0.3497.100 Mobile Safari/537.36"); все еще дает тот же результат, как показано вжурналы выше.(строка журнала 7)

...