Android 浏览器从完整限定符中删除 https:// 方案
Android browser cuts the https:// scheme from complete qualifier
在我的应用程序中,我在 CustomTabsIntent 或 WebView 中显示外部 HTML 站点:
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:// 关闭。
当我将该方案手动添加到地址栏时,会显示正确的样式。
当我的 android 应用程序调用它时,如何在我的 android 浏览器的地址字段中强制使用 https:// 方案?
可能是缓存。如果您可以控制 html 网站,请将包含内容更改为:
<link href='https://my.site.com/assets/css/style.css?something=132545' rel='stylesheet' type='text/css'>
之后,在 phone 上试一下。如果缓存清除并提取新的 css 文件,请将数字更改为随机生成的数字。
它会在每次 "something" 变量改变时加载文件。
如果您不经常执行这些样式更新,请将其设置为固定数字,并在每次更新 css 文件时不断增加它。
根据您关于未使用 https 加载的字体的信息,您可以尝试覆盖 onReceivedSslError 并查看它是否解决了问题:
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler,
SslError error) {
handler.proceed();
}
小心,这会完全禁用 ssl 验证...这是一条危险的路线。
在我的应用程序中,我在 CustomTabsIntent 或 WebView 中显示外部 HTML 站点:
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:// 关闭。 当我将该方案手动添加到地址栏时,会显示正确的样式。
当我的 android 应用程序调用它时,如何在我的 android 浏览器的地址字段中强制使用 https:// 方案?
可能是缓存。如果您可以控制 html 网站,请将包含内容更改为:
<link href='https://my.site.com/assets/css/style.css?something=132545' rel='stylesheet' type='text/css'>
之后,在 phone 上试一下。如果缓存清除并提取新的 css 文件,请将数字更改为随机生成的数字。
它会在每次 "something" 变量改变时加载文件。 如果您不经常执行这些样式更新,请将其设置为固定数字,并在每次更新 css 文件时不断增加它。
根据您关于未使用 https 加载的字体的信息,您可以尝试覆盖 onReceivedSslError 并查看它是否解决了问题:
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler,
SslError error) {
handler.proceed();
}
小心,这会完全禁用 ssl 验证...这是一条危险的路线。