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