Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.07.2011, 13:47
IvanD вне форума Посмотреть профиль Отправить личное сообщение для IvanD Найти все сообщения от IvanD
  № 1  
Ответить с цитированием
IvanD

Регистрация: Jul 2011
Сообщений: 2
По умолчанию Ошибка при вызове callBack'a со страницы

Привет форум,
Никогда раньше не работал с as3, недавно понадобилось написать скрипт который позволил бы пользователю выбрать файлы, а затем передал бы JS скрипту имена этих файлов с их содержимое в Base64.

Помучившись пару часов выдавил из себя
Код AS3:
package{
    import flash.net.FileReferenceList;
    import flash.net.FileReference;
    import flash.events.*;
    import flash.external.ExternalInterface;
    import flash.system.Security;
    public class FileToBase64{
        public var fileRef:FileReferenceList = new FileReferenceList();        
 
        public function FileToBase64():void{
            Security.allowDomain('mydomain.com');
            fileRef.addEventListener(Event.SELECT, fileSelectHandler);
            ExternalInterface.addCallback('browseFiles', browse);
        }
 
        public function browse():void{
            fileRef.browse();
        }
 
        public function fileSelectHandler(evn:Event):void{
            for each(var selectedFile:FileReference in fileRef.fileList){
                selectedFile.addEventListener(Event.COMPLETE, onReadyHandler);
                try{
                    selectedFile.load();
                } catch (e:Error) {
                    trace("Cannot load file!");    
                }
            }
        }
        public function onReadyHandler(evn:Event){
            //trace(evn.target);
            var file = evn.target;
            ExternalInterface.call('selectedFilesHandler("'+Base64.encode(file.data)+'")');
            /*trace(file);
            trace(Base64.encode(file.data));*/
        }
    }
}
И тестовую страничку:
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <title>SWFObject 2 static publishing example page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <script type="text/javascript" src="swfobject.js"></script>
        <script type="text/javascript">
            var FileToBase64Obj = null;
            var path = 'http://mydomain.com';
            window.onload = function(){
                swfobject.embedSWF(path + 'FileToBase64.swf', 'test', '1', '1', '9.0.0', path + 'expressInstall.swf', null, 
                {'allowScriptAccess':'sameDomain', 'allownetworking':'yes', 'play':'true', 'movie':'FileToBase64.swf'}, {'id':'FileToBase64'}, flashLoaded);
            };
            function flashLoaded(e){
                if(e.success){
                    FileToBase64Obj = e.ref;
                    browse();
                }
            }
            function browse(){
                if(typeof(FileToBase64Obj.browseFiles) == 'function'){
                    console.log('ok')
                    FileToBase64Obj.browseFiles();
                }else{
                    console.log('fail')
                    window.setTimeout(arguments.callee, 32);
                }
            }
        </script>
    </head>
    <body>
        <div id="test">    
            
        </div>
    </body>
</html>
В итоге вижу в консоли бровзера:

Код:
fail
fail
fail
fail
ok
Error calling method on NPObject!
FileToBase64Obj.browseFiles();
Гугл так и не дал внятного ответа, все файлы естественно на одном домене, прошу помощи у вас.

Добавлено через 5 часов 58 минут
Почитал апдейты секюрности для 10й версии Flash Player, там запретили вызов .browse() и .download() через калбэки, только по средству внутренних событий. Отлично, может кто-то подскажет как называется объект всего флеш мувика? Я повешу на него onclick, сделаю прозрачным и помещу над кнопкой.

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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