Вопрос

В скрипте Flash Action 3, когда вам нужно загрузить текст, вы используете класс с именем URLLoader, и когда вам нужно загрузить изображение (или .swf), вы используете класс под названием 'Loader.' Насколько я знаю, загрузка .bmp с помощью URLLoader это так же бесполезно, как загрузка файла .xml в загрузчик - он не вычисляет.

Я создаю класс, который обрабатывает очередь загружаемых внешних ресурсов, но помимо разделения целевого URL-адреса для проверки расширения файла, я не могу найти хороший способ определить, требуется ли для каждого URL-адреса URLLoader или Грузчиком.В любом случае, можно себе представить, что URL-адрес .php может возвращать либо изображение, либо документ - так что нет никакого способа рассчитывать на имена файлов, чтобы указать правильный тип класса loader для использования.

Есть какие-нибудь идеи о том, как надежно определить подходящий класс для задания по URL-адресу?

Это было полезно?

Решение

что ж, самый сложный вопрос - это определение типа цели ...

  1. просмотр URL -адреса довольно прост, но может не всегда сработать...некоторые люди предоставляют изображения с phps и так далее ...
  2. вы могли бы сделать это как браузер ...начните загрузку, а затем посмотрите, что это такое ...опять же, существует множество возможностей ...
    1. загрузите данные в виде двоичных данных ...когда закончите, посмотрите на начальную последовательность ...это PNG (89 50 4E 47 0D 0A 1A 0A)?GIF (47 49 46 38 39 61)?JPEG (FF E0)?SWF ("FWS" (забавно, не правда ли?))?все остальное должно быть текстовым или основанным на тексте ...в случае с изображением загрузите его в Loader с Loader::loadBytes ...однако будьте осторожны с SWF ...вы должны загружать графические SWF - файлы только таким образом ...в любом другом случае преобразуйте его в строку, используя правильную кодировку (в идеале текстовые данные подаются в utf8)...тогда, возможно, вы уже можете догадаться, могут ли это быть переменные в формате XML, JSON или URL...попробуйте выполнить синтаксический анализ (используя классы XML, com.adobe.serialization.JSON, flash.net.URLVariables) ...если все терпит неудачу, это, вероятно, просто текст (вы можете попытаться проверить это поверхностно...если вам нужен какой-то вклад в это, оставьте мне комментарий) ...
    2. делайте то, что HTTP себя ...откройте сокет и загрузите исходный код ...кроме того, вы получите mime-типы...ничего такого, на что вы могли бы положиться, но это помогает ...существует HTTP внедрение в AS3 ...как только у вас будут необходимые данные
  3. передайте тип вручную ...чистый и незамысловатый ...и ты ни на кого больше не полагаешься...

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

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

так что, да ...какой бы способ вы ни выбрали, удачи вам...;)

приветствие

back2dos

Другие советы

Объемный погрузчик есть ли какие-нибудь догадки, основанные на URL, может быть, заглянуть в исходный код и посмотреть, как они это делают?

Лично я бы точно указал, как вы хотели бы загрузить свой объект, если это изображение или xml.Поскольку я написал несколько загрузчиков очередей, я предлагаю вам отслеживать не просто строку URL, а набор объектов с такими параметрами, как URL для загрузки, если он загружен, приоритет загрузки и тип.Вот некоторый псевдокод.

class QueueObject{
  var URLtoLoad:String;
  private var hasLoaded:Boolean = false;
  var isDataObject:Boolean = false;
  var queuePriority:Number = 3; // 
}

Теперь в вашем коде, когда вы хотите добавить что-то в свою очередь.

просто уходи

var loadObject:QueueObject = new QueueObject();
loadObject.URLtoLoad = "http://theurl.com/somedata.xml";
loadObject. isDataObject= true;

// Теперь вставьте это в класс awesome loader, который вы написали, который будет управлять очередью.Я бы отправил объект для загрузки, ссылку на текущую область, например, this, и имя функции, которую вы хотите вызвать, когда этот объект загрузится.

MyStaticLodingClass.addQueueObject(loadObject, this, myFunctionThatYouWillCallWhenDone); 

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

Это может помочь, а может и нет.

Другими словами, сделайте что-нибудь, чтобы выяснить, какой тип объекта вы пытаетесь загрузить, например BMP, и используйте правильный загрузчик на основе поиска для этого объекта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top