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 验证...这是一条危险的路线。