Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как избежать ошибки при обращении к загруженному контенту? (http://www.flasher.ru/forum/showthread.php?t=84175)

Dendroid 25.08.2006 01:42

Как избежать ошибки при обращении к загруженному контенту?
 
Ситуация стандартная: грузим внешний файл (картинку), как после этого узнать, что обращение loader.content не вызовет исключения? Или хотя бы подавить это исключение, чтобы не пугать пользователя (в браузере эта ошибка вываливается в отдельном окне, даже при использовании try...catch)?
Для загруженного swf понятно: contentLoaderInfo.childAllowsParent, а вот как для битмапа не нашёл...

FlexBuilder 30.08.2006 13:54

вообще странный вопрос... если про Allow говорить - то речь о секьюрити идет, то бишь о защите от загрузки контента с чужого сайта либо доступа к свойствам и методам, но что имеется в виду под ошибкой доступа к "битмапу"? Если проверка, что загрузилась - так на то события есть соответствующие...

Dendroid 03.09.2006 21:45

loader.contentLoaderInfo.childAllowsParent спасло Отца советской демократии. :)
Со второго раза получилось.
Оказывается, есть некоторые тонкости с http-редиректом при загрузке картинок...

silin 03.09.2006 22:58

а LoaderInfo.securityError не смотрел, он не докладывает о нарушении сандбокса?

Dendroid 03.09.2006 23:28

Не, securityError работает, если ты полез на урл, запрещённый текущей песочницей (Security.sandboxType :) ). Кстати, как поменять тип песочницы в TestPlayer? В дефолтной Security.sandboxType = "localTrusted" никаких ошибок не возникает, естественно... ;)

Здесь другой тип нарушения секьюрити ("No policy files granted access").

В конце концов, по шагам у меня получилось:
1. Грузим файл разрешений с предполагаемого урла: loadPolicyFile(...)
2. Грузим картинку (если установлено "flash.system.LoaderContext.checkPolicyFile = true;", то картинка не начинает грузиться, пока PolicyFile не будет загружен и проверен; кстати, результат проверки никак не доступен, пока не загружена картинка - это первое неудобство).
3. Если произошёл http-редирект (даже просто в другую директорию того же домена), урл картинки может оказаться не подходящим для уже загруженного PolicyFile (свойсто childAllowsParent не стало true), тогда по событию окончения загрузки получаем свойство .url у файла и пытаемся загрузить PolicyFile с нового домена/директории.
4. Теперь сидим и ждём, когда загрузится новый PolicyFile (свойсто childAllowsParent станет true). То, что нет события на окончание его загрузки - второе неудобство. Но можно, пользуясь LoaderContext.checkPolicyFile, просто снова запустить на перезагрузку картинку (куда она из кэша-то денется? ;) ). А вот если после второй загрузки картинки "childAllowsParent == false", уже можно смело говорить пользователю: "Access denied...." - это и будет корректная обработка ошибки.
5. Но зато, если теперь "childAllowsParent == true", можно, наконец, обратиться к loader.content.bitmapData :)

Первый шаг можно пропускать, если редиректы происходят каждый раз.


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

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