15

在我的应用程序中,我在 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:// 方案?

4

1 回答 1

2

可能是缓存。如果您可以控制 html 站点,请将包含更改为:

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

于 2017-04-24T13:45:43.367 回答