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