получить доступ к динамически загруженному мувиклипу (stage> scrollpane> myloader> movieclip) - PullRequest
0 голосов
/ 17 октября 2011

я пытаюсь получить доступ к

   snapText = scrollPane.source.textSnapshot;

с внешнего SWF. Я пробовал:

  trace("-->: "+scrollPane.source.textSnapshot.getText(0, 1000));
  trace("-->: "+myLoader.content.textSnapshot.getText(0, 1000));
  trace("-->: "+mc.textSnapshot.getText(0, 1000));
  trace("-->: "+mc.getChildAt(0).textSnapshot.getText(0, 1000));
  trace("-->: "+mc.getChildByName(myLoader).textSnapshot.getText(0, 1000) );
  trace("-->: "+scrollPane.content.textSnapshot.getText(0, 100));

все из которых были бесплодны. КСТАТИ:

  mc.getChildAt(0).textSnapshot.getText(0, 1000)

выдает ошибку:

  1119: Access of possibly undefined property textSnapshot through a reference with static type flash.display:DisplayObject.

хотя я знаю, что метод есть.

весь приведенный выше код запускается в функции checkHandler:

 myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, checkHandler);

поэтому swf должен быть полностью загружен. Текст также есть, я проверил с помощью декомпилятора SWF. мувиклип с загрузчиком создается так

 scrollPane = MovieClip(root).scrollPaneOnStage;
 myLoader.load(new URLRequest("tmp1.swf"));
 mc.addChild(myLoader);
 scrollPane.source = mc;

спасибо заранее!

ОБНОВЛЕНИЕ - все еще не решено

Я сейчас получаю доступ к SWF, как указано HotN.

  function checkHandler(evt:Event):void {

         libMC  = evt.target.content as MovieClip;
         libMC.gotoAndStop(0); 
          trace(libMC.textSnapshot.getText(0, 100));
         snapText = libMC.textSnapshot;
        scrollPane.source = mc;
    }

Сначала это приводило к ошибке, поскольку загрузчик в скрипте as3 не может загрузить фильм as2 (т. Е. AVM1). поэтому я создал AVM2 swf, что привело к ошибке: Ошибка # 2000: Нет активного контекста безопасности. В качестве решения я использовал класс из http://www.igorcosta.org/?p=231 для загрузки SWF, но все еще не могу доступ к текстуСнимок экрана:

  trace(libMC.textSnapshot.getText(0, 100));

ничего не возвращает и не выдает ошибку!

Кстати: хотя я мог изменить формат SWF, я не могу изменить сам файл, так как он автоматически генерируется.

Ответы [ 3 ]

1 голос
/ 17 октября 2011

Используете ли вы TLF Engine (текстовые поля TLF)? Flash CS5 TLF Engine вызывает некоторые ошибки при загрузке SWF-файлов и попытке доступа к свойствам или методам этих загруженных SWF-файлов. Вы можете прочитать все об этом в этом сообщении в блоге Стивен Сакс .

Если это так, решение довольно простое: замените текстовые поля TLF на обычные (они помечены Classic Text , на панели свойств TextField есть селектор), и (надеюсь) все будет работать нормально, без дальнейшего изменения кода.

Если вам нужны TLF-тексты и вы не можете делать с обычными, вы можете найти несколько решений (больше похожих на обходные пути, но неважно) в этом Adobe Technote .

Надеюсь, это поможет!

1 голос
/ 17 октября 2011

Чтобы ссылаться на что-либо в загруженном SWF-файле, вам нужно просмотреть содержимое загрузчика, который вы использовали для загрузки SWF-файла. Это даст вам эту ссылку:

function checkHandler(e:Event):void {
    var loadedSWF:Object = e.target.content;
}

Пройдя через loadedSWF, вы сможете получить содержимое SWF, если они настроены на публичную видимость.

0 голосов
/ 24 октября 2011

Так что это заняло у меня слишком много времени, но я понял это.

      //... {

        loader = new Loader();  
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, checkHandler);
        loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);
        var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); 
        context.checkPolicyFile = false;
        loader.load(new URLRequest("tmp1.swf"), context);


      //..... }

      function checkHandler(evt:Event):void {

        loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,checkHandler);

        libMC  = loader.content as MovieClip;

                    //works now!
            libMC.textSnapshot.getText(100, 200);

        scrollPane.source = libMC;


    }

так что хитрость заключалась в том, чтобы использовать стандартную функцию загрузчика, как предлагалось много раз. однако flash каким-то образом испортил настройки безопасности / песочницы на моем локальном компьютере, что привело к ошибке 2000: нет активного контекста безопасности . однако он все равно работал нормально при загрузке на удаленный сервер, что странно. Вы можете установить локальные настройки воспроизведения на «доступ только к локальным файлам» в меню «Файл»> «Параметры публикации», но в моем случае это совсем не помогло ...

...