Браузер 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... это опасный маршрут.

Другие вопросы по тегам