没有直接的方法来判断任何特定字符是否以有用的方式呈现。从JavaScript中,你所能做的就是创建一个包含目标字体中一个(或多个)目标字符的<span>
,并将其宽度与另一个包含同样数量你知道不会呈现有用字符的字符的<span>
进行比较(*). 如果它们的宽度相同,那么很可能在每个中都有一堆框或问号,因此您可以采取备份措施,例如添加图像。
由于这是相当麻烦的,您可能更喜欢使用图像。或者您可以尝试在现代浏览器上使用@font-face
嵌入来通常使用已知良好的字体。由于通常IE对Unicode字体回退支持不佳,因此请务必包括EOT字体。
(*:您可以尝试使用当前未分配且希望保持不变的字符,例如U+08FF,或保证无效的字符,例如U+FFFF,但是值得怀疑的是,您是否应该允许将其放入HTML文档中。)
这并不完全是你所要求的,但它可能会解决你的问题(假设你的目标是输出 HTML 而无需依赖外部图片等)
你考虑过图像数据 URL(也称为 RFC2397)吗: http://www.ietf.org/rfc/rfc2397.txt
与其使用:
✓
如果要表示一个勾选标记,你可以使用:
<img src="data:image/gif;base64,R0lGODlhCgAKAJEAAAAAAP///////wAAACH5BAEAAAIALAAAAAAKAAoAAAISlG8AeMq5nnsiSlsj
zmpzmj0FADs="/>
这不需要在客户端安装特定的Unicode字体来显示勾选标记,但它不能在Internet Explorer 7或更低版本上工作。(Internet Explorer 8,Firefox,Safari等应该可以正常工作)
如果你能想出一种远程检查 MS Office 2000 或更高版本是否安装的方法,那么你应该能够假设 Arial Unicode MS 已安装,因此在字体中拥有这个代码点(只要 CSS 字体系列设置为 "Arial Unicode MS、Arial、sans-serif" 等)。
我认为这只适用于 Microsoft Internet Explorer,但是你应该能够通过尝试在 JavaScript 中创建其 ActiveX 对象来检测 Word 安装:
if(new ActiveXObject("Word.Application"))
{
window.alert("Word is installed, go ahead and use the Unicode check mark in HTML");
}
else
{
window.alert("Word is not installed, use your image of a check mark.");
}
但是考虑到这只在IE中有效,可能会在IE8中引发安全警告,并且您仍然需要为其他浏览器或没有MS Office的IE浏览器提供备用机制,始终使用图像可能是最好的选择。
Unicode是相当标准的,我总是使用unicodemap.org。这里是你正在使用的字符[链接],这将为你提供与勾选标记相关的所有代码。如果你想要完全的向后兼容性,你需要使用一个实际的图像。一个勾选标记的图像文件比一个JavaScript hack/plugin更轻量级。这可能是你最好的选择。