Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема с отображением подгружаемых в runtime шрифтов (http://www.flasher.ru/forum/showthread.php?t=181908)

PainKiller 05.07.2012 20:01

Проблема с отображением подгружаемых в runtime шрифтов
 
Бьюсь над этим уже довольно долго, поэтому решил написать сюда т.к. собственные идеи иссякли. Я делаю приложение в котором пользователь может задавать шрифт текста выбирая его из комбобокса. Каждый шрифт подгружается в виде отдельной SWF, в которую он заэмбедден следующим образом:
Код AS3:

package
{
 
        import flash.display.MovieClip;
 
        public class Journal extends MovieClip
        {
                [Embed(source = "Journal/JournalC.otf", fontName="JournalC", fontStyle="normal", fontWeight="normal", mimeType="application/x-font", advancedAntiAliasing="true", embedAsCFF="false")]
                public var JournalC:Class;
 
                [Embed(source = "Journal/JournalC-Bold.otf", fontName="JournalC", fontStyle="normal", fontWeight="bold", mimeType="application/x-font", advancedAntiAliasing="true", embedAsCFF="false")]
                public var JournalCBold:Class;
 
                [Embed(source = "Journal/JournalC-Italic.otf", fontName="JournalC", fontStyle="italic", fontWeight="normal", mimeType="application/x-font", advancedAntiAliasing="true", embedAsCFF="false")]
                public var JournalCItalic:Class;
 
                public function Journal()
                {
                        Font.registerFont (JournalC);
                        Font.registerFont (JournalCBold);
                        Font.registerFont (JournalCItalic);
 
                }
        }
 
}

В основной флешке шрифты загружаются следующим образом (стараюсь приводить только относящийся к делу код, а вообще там все сложно):
Код AS3:

fontsLoader = new Loader ();
                        fontsLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, fontLoaded);
                        fontsLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOERROR);
 
 
// это естественно в цикле
var path:String = Global.URL_PATH + Global.FONTS_PATH + fontsInfo.fonts.font[fontsCounter].lib.@src;
                        fontsCounter++;
                        fontsLoadedPathes.push(path);
                        var context:LoaderContext = new LoaderContext();
                        //context.securityDomain = SecurityDomain.currentDomain; 
                        context.applicationDomain = ApplicationDomain.currentDomain;
                        fontsLoader.load(new URLRequest(path), context);
 
//здесь обрабатывается событие загрузки
private function fontLoaded(ev:Event):void
                {
                        var target:LoaderInfo = ev.target as LoaderInfo;
                        var mc:MovieClip = target.content as MovieClip;
                        fonts.push(mc);
                        addChild(mc);
                }

Теперь описание проблемы. Никаких ошибок не выкидывается, но при локальном запуске флешки на моем компьютере - шрифты не меняются, при выборе шрифта из комбобокса текст изчезает.
Загружаю флешку на сервер (тот же домен, где лежат и SWFки со шрифтами), запускаю флешку с сайта - все работает, НО ТОЛЬКО НА МОЕЙ МАШИНЕ!!
Если же зайти на сайт с любого другого компа, текст при переключении шрифта пропадает.
Сперва я подумал. что это проблемы с безопасностью, песочницами, ApplicationDomain и тому подобным. Но вдумчивое изучение доков на эту тему ничего не дало, ведь все грузится с одного домена.
Буду благодарен за помощь, если кому то нужна ссылка на приложение, дам в личку.

in4core 05.07.2012 20:09

Простой совет, после загрузки выведи Font List ( думаю с enumerateFonts работал, если нет найди ). И увидишь какие шрифты реально встроились, а какие нет и ожидают

PainKiller 05.07.2012 20:18

забыл сказать - я это делал, локально загружаемые шрифты не выводятся, с севера вывожу фонтлист в консоль, вижу все загруженные шрифты. На других машинах посмотреть с сервера список шрифтов пока нет возможности, но я думаю результат будет очевиден. Найти корень проблемы мне это не помогло.

Wolsh 05.07.2012 20:35

http://flasher.ru/forum/showthread.php?t=169912

PainKiller 05.07.2012 20:42

Wolsh, спасибо за помощь, но эту ветку я внимательно читал и перечитывал еще когда организовывал смену шрифтов, ни нашел там ничего, что помогло бы мне решить проблему, хотя конечно экспериментировать я продолжу, в том числе и с рецептами описанными там.

Wolsh 05.07.2012 23:12

1. Не хочу обидеть, но действительно самая распространенная ошибка — забыть указать текстовому полю embedFonts = true; Обязательно проверьте.
2. Попробуйте регистрировать шрифты не в конструкторе, а "после", отдельным методом.

in4core 05.07.2012 23:27

Да ни нужно ниче регестрировать вообще.
Есть флешка в айде рисуем так текстовое поле, делаем нужный формат, встриваем символы.
Далее грузим ( и даже на сцену добавлять не надо ) - все шрифты на месте.

Код AS3:

package com.in4core.edenSite.utils 
{
        import flash.text.Font;
        /**
        * ...
        * @author in4core lab
        */

        public final class FontManager
        {
                public static const SharedLibrary:SharedFonts = new SharedFonts();
 
                public static function getFontsListing():void
                {
                        var fontsListing:String="";
                        var fontArray:Array = Font.enumerateFonts(false);
                        fontArray.sortOn(['fontName']);
 
                        for (var i:int = 0; i < fontArray.length; i++)
                        {
                                var thisFont:Font = fontArray[i];
                                fontsListing += thisFont.fontName+ " " + thisFont.fontStyle +"\n";
                        }
                        trace('Shared fonts : \n' + fontsListing + '---------------');
                }
        }
 
}

Добавлено через 1 минуту
Тут тупо инициализация для embed
Код AS3:

public static const SharedLibrary:SharedFonts = new SharedFonts();

В ваше случае будет инициализатором просто лоадер

PainKiller 06.07.2012 00:05

Спасибо всем за помощь. embedFonts = true; - стоит, я тоже об этом сперва подумал. Добрался до машины, на которой проверил трейсы фонтлиста с сервера - все шрифты выводятся, возможно проблема и не в этом. Так что буду ковыряться :-)

Добавлено через 14 часов 26 минут
после некоторых манипуляций с кодом обнаружил, что если закомментировать строчку embedFonts = true; шрифты показываются как надо (но они у меня установлены в системе, поэтому это не удивительно). Если оставить эту строчку шрифты не показываются ни локально ни с сервера НО список зарегистрированных шрифтов показывает что нужные шрифты зарегистрированы в системе!!!! В консоли видно, что шрифт присваивается текстформату, а тот в свою очередь присваивается текстфилду, т.е. каких то сторонних проблем по присвоению шрифта в ходе исполнения кода нет.

Добавлено через 14 часов 55 минут
нет, соврал. Трейсы приходят из подгружаемых флешек. Шрифты из фонт листа главной флешки показывают что нужные шрифты не заэмбедены.

Добавлено через 15 часов 10 минут
похоже проблема с SWF со шрифтами попробую перекомпилить в чем нибудь


Часовой пояс GMT +4, время: 15:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.