编辑简版:
Adobe Flash文档列出了TextArea上的一个属性embedFonts
:
一个布尔值,指示fontFamily中指定的字体是否为嵌入式字体。如果fontFamily引用了嵌入式字体,则必须将此样式设置为true。否则,不使用嵌入式字体。如果将此样式设置为true且fontFamily未引用嵌入式字体,则不显示任何文本。默认值为false。
关于“如果将此样式设置为true且fontFamily未引用嵌入式字体,则不显示任何文本”的说法:我该如何在ActionScript中检测到这种情况?
TL;DR 原始版本:
我有一个Flash应用程序,它加载包含嵌入字体的外部.swf
文件,以便这些字体可以在主应用程序中使用。我们通过对使用自定义字体的任何内容使用以下ActionScript代码来实现此目的:
textBoxName.embedFonts = true;
然而,有时在加载外部的
.swf
文件时,请求的字体不可用--这经常发生在某人更改了外部的.swf
文件并没有包含先前存在的所有字体时...无论原因如何都是不可避免的并且会发生。当发生时,任何一个不可用的字体中的文本都不会显示。例如:1.主应用程序设置为使用"Myriad"。它正在加载一个包含Myriad以及其他几种字体的外部
swf
文件
2.过了一段时间,外部swf
被更新为包含新的字体集,并且Myriad不再是其中之一。但是主应用程序没有更新。
3.现在,主应用程序中的所有" Myriad "文本都不再显示。是否有任何方法可以将文本默认为可用的字体,或者检测到字体不可用并运行一些ActionScript代码?
编辑:如果重要的话,这里是我用来从外部
swf
文件加载字体的代码:// Font Loader:
var loadedFonts = Array();
var fontPakLoadHandler = new Object();
fontPakLoadHandler.percent = 0;
fontPakLoadHandler.onLoadStart = function(target_mc:MovieClip)
{
if(!SuspendEvents)
ExternalInterface.call("fontLoadStart", _root.lcId);
}
fontPakLoadHandler.onLoadInit = function(target_mc:MovieClip)
{
if(!SuspendEvents)
ExternalInterface.call("fontLoadInit", _root.lcId);
}
fontPakLoadHandler.onLoadError = function(target_mc:MovieClip, errorCode:String, httpStatus:Number)
{
if(!SuspendEvents)
ExternalInterface.call("fontLoadError", _root.lcId, errorCode, httpStatus);
}
if(_root.fontPakProgress=='all')
{
fontPakLoadHandler.onLoadProgress = function(target_mc:MovieClip, loadedBytes:Number, totalBytes:Number)
{
fontPakLoadHandler.percent = loadedBytes / totalBytes;
if(!SuspendEvents)
ExternalInterface.call("fontLoadProgress", _root.lcId, loadedBytes, totalBytes, fontPakLoadHandler.percent);
}
}
else
{
fontPakLoadHandler.onLoadProgress = function(target_mc:MovieClip, loadedBytes:Number, totalBytes:Number)
{
var perc = loadedBytes / totalBytes;
if( (fontPakLoadHandler.percent < .75 && perc >= .75) ||
(fontPakLoadHandler.percent < .50 && perc >= .50) ||
(fontPakLoadHandler.percent < .25 && perc >= .25))
{
if(!SuspendEvents)
ExternalInterface.call("fontLoadProgress", _root.lcId, loadedBytes, totalBytes, perc);
}
fontPakLoadHandler.percent = perc;
}
}
fontPakLoadHandler.onLoadComplete = function(target_mc:MovieClip, httpStatus:Number)
{
if(!SuspendEvents)
ExternalInterface.call("flashReady", _root.lcId, true);
//ExternalInterface.call("fontLoadComplete", _root.lcId, httpStatus);
}
var fontPakLoader = new MovieClipLoader();
fontPakLoader.addListener(fontPakLoadHandler);