有没有办法检测Internet Explorer中的字体下载属性是否已禁用或启用?
目前,如果我要为字体渲染实现@ font-face解决方案(font-squirrel或typekit或其他),如果Internet Explorer有“字体下载”,那么除之外所有浏览器都会播放 “禁用选项。
此设置可在IE中找到>互联网选项>安全>自定义级别>下载>字体下载>启用/禁用。
如果我能检测到这个选项,我可以回到javascript方法。
这些解决方案不起作用,因为此选项实际上不会禁用该功能,它会阻止下载:
答案 0 :(得分:7)
由于此功能可防止发生下载,因此(一个相当脏的)解决方案是要求IE下载所谓的字体,这实际上是服务器上放置的简单脚本,例如。一个cookie说“好吧他得到字体”并返回一个空白页面。当用户加载下一页时,如果cookie不存在,您将部署Javascript机器。
答案 1 :(得分:5)
我意识到这个问题已经过时了,但对于一些IT安全严格的企业互联网用户来说,这个问题仍然存在。我查看了上面的解决方案和其他解决方案,但它们对我来说效果不佳,所以我发现另一个解决方案不需要服务器端代码,没有javascript,也没有css。它本质上是神奇的,但它有一些局限性。
限制1:这仅适用于使用高数字代码点显示图像的图标字体。它不适用于可读文本的字体字体。
限制2:您必须找到适合替换自定义图标的标准UTF-8符号。
例如,如果您有一个用于显示星号的自定义字体,那么适当的后备将是unicode代码点0x2605★。因此,在您的字体生成代码中,您需要将该代码点硬编码到您的css类中以获取星形图标。如果您使用的是“grunt-webfont”,您可以在grunt文件中执行以下操作:
webfont: {
icons: {
options: {
codepoints: {
'star': 0x2605
...
}}}}
明星就是一个完美的例子;为您的花式图标找到合适的UTF8替代品可能具有挑战性,因此这可能对每个人都不起作用。考虑到这个问题影响了极少数用户,我们认为这是一个合适的透明解决方案,不会影响普通用户使用额外的js / css / cookie cruft。
答案 2 :(得分:4)
基于@Zopieux流程图,当禁用字体下载时,我能够使这个脚本适用于IE6-9,在我的情况下,这个脚本适用于其他企业内部网已禁用此设置的客户端。
CSS:
@font-face {
font-family: 'TestFont';
src: url('/includes/font.php?type=eot');
src: url('/includes/font.php?type=eot#iefix') format('embedded-opentype'),
url('/includes/font.php?type=woff') format('woff'),
url('/includes/font.php?type=ttf') format('truetype'),
url('/includes/font.php?type=svg#UniversLTStd49LtUltraCn') format('svg');
font-weight: normal;
font-style: normal;
}
PHP,当请求font-face src url时,它会提取此脚本,该脚本会检查类型,设置cookie并提供所选的webfont。如果启用了字体下载并且您没有重新路由到字体文件,IE将抛出@ font-face错误:
<?php
$type = $_REQUEST['type'];
$location = "Location: /includes/fonts/universltstd-lightultracn-webfont.".$type;
// create a cookie
setrawcookie("FontDownloaded", 1, time()+3600*24, '/');
header($location);
?>
JS,然后在客户端,执行类似这样的操作来检查cookie,并执行替代方法,如cufon-yui.js或typeface.js:
$(function() {
$('body').append('<span id="TestFont"/>');
$('#TestFont').html('Testing').css({
fontFamily: 'TestFont',
opacity: 0
});
// find cookie
bool = Boolean(getCookie('FontDownloaded')); // use your own cookie method
if (!bool) {
// implement @font-face fallback
Cufon.replace('.items', { fontFamily: 'NewFont' });
}
$('#TestFont').remove();
});