Android-браузер отключает схему https://из полного квалификатора

В моем приложении я показываю внешний HTML-сайт либо в CustomTabsIntent, либо в WebView:

if (customTabsIntent != null) customTabsIntent.launchUrl(this, Uri.parse("http://some.where.com/site.html"));
else startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://some.where.com/site.html")));

Но стиль этого HTML уже обновлен, но мой смартфон показывает старый стиль (старые шрифты и т.д.).

В файле *.html есть ссылка .css:

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link href='https://my.site.com/assets/css/style.css' rel='stylesheet' type='text/css'>
</head>

И в этом *.css файле имеется отдельный шрифт; например:.

@font-face {
    font-family: 'MyFontRegular';
    src: url('https://www.openfont.org/assets/mail/fonts/MyFontWeb-Regular.woff') format('woff'), 
    url('https://www.openfont.org/assets/mail/fonts/MyFontWeb-Regular.eot') format('embedded-opentype');
}

Как я уже сказал, Chrome-браузер на моем смартфоне не показывает ссылки на шрифты, потому что он отключает http:// или https://. Когда я добавляю эту схему вручную в адресную строку, отображается соответствующий стиль.

Как я могу заставить схему https://в поле адреса в моем браузере Android, когда она была вызвана из моего приложения Android?

Ответы

Ответ 1

Это может быть кеш. Если у вас есть контроль над сайтом html, измените include на что-то вроде:

<link href='https://my.site.com/assets/css/style.css?something=132545' rel='stylesheet' type='text/css'>

После этого попробуйте по телефону. Если кеш очищается и вытаскивает новый файл css, измените его на произвольно сгенерированный номер.

Он будет загружать файл каждый раз, когда изменяется переменная "что-то". Если вы выполняете эти обновления стиля не так часто, сделайте это фиксированным числом и продолжайте увеличивать его каждый раз, когда вы обновляете файл css.

Следуя вашей информации о том, что шрифты не загружаются с помощью https, вы можете попробовать переопределить onReceivedSslError и увидеть, как это решает проблему:

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler,
            SslError error) {
        handler.proceed();
    }

Будьте осторожны, это полностью отключает проверку ssl... это опасный маршрут.