Просмотр полной версии : Как избежать ошибки при обращении к загруженному контенту?
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-редиректом при загрузке картинок...
а 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 :)
Первый шаг можно пропускать, если редиректы происходят каждый раз.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.