PDA

Просмотр полной версии : [BUG] Image, SWFLoader не грузят файлы на Маке


__i
11.04.2007, 16:42
Image, SWFLoader не грузят файлы на Маке, если приложение работает локально (делалось приложение в цинке для Мака).

Вероятно буг связан с SWFLoader, который невено колбасит строку для линка
код SWFLoader, метод loadContent (начиная со строки 1261) и мои коменты

.......
if (!(url.indexOf(":") > -1 || url.indexOf("/") == 0 || url.indexOf("\\") == 0))
{
var rootURL:String;
if(SystemManagerGlobals.bootstrapLoaderInfoURL!=null && SystemManagerGlobals.bootstrapLoaderInfoURL!="")
rootURL = SystemManagerGlobals.bootstrapLoaderInfoURL;
else if (root)
rootURL = root.loaderInfo.url;
else if (systemManager)
rootURL = DisplayObject(systemManager).loaderInfo.url;

if (rootURL)
{
var lastIndex:int = Math.max(rootURL.lastIndexOf("\\"), rootURL.lastIndexOf("/"));
//тут индусы наверное забыли, что у мака то разделители каталогов ":"
//и локальный путь будет содержать не слеши, а ":".
//поэтому у нас получаеться неверный путь к картинке
//естетсвенно мы получаем мега болт вместо имаджа.


if (lastIndex != -1)
url = rootURL.substr(0, lastIndex + 1) + url;
}
}
.......


Решение этой проблемы (не идеально но нас пока устраивает):

Передаем в сурс Image полный путь к картинке, который получам так

link = mdm.Application.path + [относительный путь к картинке]

mdm.Application.path - это цинковая функция возвращающая каталог приложения, но можно выдегривать путь и без нее из
Application.application.url обрезая имя файла в конце.

etc
11.04.2007, 16:51
Очередной косяк Flex-а. Кстати, локальный путь на маке может быть слешами. Не видел у себя двоеточий.

__i
11.04.2007, 17:14
Кстате если таки поставишь себе Flex на Мак то поставь там брейкпоинт и посмотри чему равен rootURL, так для интереса)

etc
11.04.2007, 17:42
Да у меня тут виндовый Flex коньки отбросил, не хочет работать ни с какой версией дебагового плеера.

Reijii
12.04.2007, 13:36
Очередной косяк Flex-а. Кстати, локальный путь на маке может быть слешами. Не видел у себя двоеточий.

в нашей ситуации, и на тех маках, что тестили, пути были через ":", хотя может это уже завязанно на Zink. :) вообщем be careful people :)

MyChemic
09.06.2008, 21:42
никто не смог победить этот баг? а то на винде смотрел, там все ок, а на маке ни в какую не хочет грузить картинки по заданному пути, а из своей папки грузит(((

пути картинок трейсил, там все ок

ex.image
10.06.2008, 11:09
хмм так грузит )
<mx:Image source="file:////Users/stanislav/Pictures/back.jpg"/>
Проверял на AIR.
или я не так что то понял?

MyChemic
10.06.2008, 11:53
ой, спасибо, дома попробую

rain_heart
18.06.2008, 18:58
вот придумал такой способ:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import flash.display.*;
import flash.media.*;
import flash.events.*;
import flash.net.*;

var _urlSWF:String = "swf/testAS3.swf"//имя загружаемой SWF и путь, локальная папка swf
var _rMovieSWF:MovieClip = new MovieClip();//мувиклип в который будем грузить (можно думаю и без него)

public function PlaySWF():void
{
var _loaderSWF:Loader = new Loader();
var _urlReq:URLRequest = new URLRequest(_urlSWF);
_loaderSWF.load(_urlReq);
_loaderSWF.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadSWFComplite);
}
public function onLoadSWFComplite(e:Event):void
{
_rMovieSWF = e.target.content as MovieClip;
_mySWFLoader.addChild(_rMovieSWF);//добавляем в SWFLoader наш загруженный мувиклип
_mySWFLoader.addEventListener(Event.ENTER_FRAME, onEterFrameSWF);//смотрим текущий кадр
}

public function onEterFrameSWF(e:Event):void
{
_myText.text=_rMovieSWF.currentFrame.toString();
}

]]>
</mx:Script>
<mx:SWFLoader width="310" height="96" id="_mySWFLoader" initialize="PlaySWF();"/>
<mx:Text width="149" id="_myText" text="sds" y="104"/>

</mx:Application>


Идея в том что грузим swf средствами флеша а точнее класса Loader и передаем его объекту SWFLoader.
Тут еще добавленно текстовое поле которое показывает текущий кадр swf-ки
С картинками тоже будет работать
тестовый SWF ролик был скомпилирован для AS3 для AS2 по идее тоже должно работать только текущий фрейм показывать не будет так как там после загрузки у нас не [movieclip object] а что то типа [AVM1Movie]