Зачем вызывать функцию flash из javascript, но FileReference не работает во flash?

Мне нужно вызвать функцию флеш из JavaScript. Я использую flash.external и addCallback, чтобы сделать это. все работает хорошо, но когда я использую FileReference во флеш-памяти, функция не открывала мой браузер...

пожалуйста, смотрите ниже описание:
Я вызываю свою функцию в JavaScript с помощью этого кода:<input type="button" value="Browse" onclick="sendToFlash('Hello World! from HTML');" />Вы можете увидеть весь мой HTML, как показано ниже:

<html>
<head>
<title>Upload test</title>
</head>
<script>
function hello (size) {
    alert ("size hast: " + size);
}

function sendToFlash(val){
    var flash = getFlashObject();
    flash.new_browser(val);
}

var flash_ID = "Movie2";
var flash_Obj = null;
function getFlashObject(){
    if (flash_Obj == null){
        var flashObj;
        if (navigator.appName.indexOf( "Microsoft" ) != -1){
           flashObj = window[flash_ID];
        } 
        else{
           flashObj = window.document[flash_ID];
        }
        flash_Obj = flashObj;
    }
    return flash_Obj;
}
</script>

  <body>
    <center>

    <embed width="560" height="410" type="application/x-shockwave-flash" 
    flashvars="sampleVars=loading vars from HTML" 
    salign="" allowscriptaccess="sameDomain" allowfullscreen="false" menu="true" name="Movie2" 
    bgcolor="#ffffff" devicefont="false" wmode="window" scale="showall" loop="true" play="true" 
    pluginspage="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" 
    quality="high" src="Movie2.swf">

    </center>

    <input type="button" value="Browse" onclick="sendToFlash('Hello World! from HTML');" />
  </body>
</html>

когда я нажимаю Browse на html странице javascript вызывает функцию sendToFlash и SendToFlash Функция отправляет мою строку (Hello World! из HTML) на флэш.
во флэш-памяти я получаю эту строку с кодом ниже:

resultsTxtField.text = "";
uploadButton.onPress = function () {
   return browse_file("Hello World! from Flash");
}

import flash.external.*;
ExternalInterface.addCallback("new_browser", this, browse_file);


function browse_file (my_test_val) {
    _root.resultsTxtField.text = "val: " + my_test_val;
    import flash.net.FileReference;
    var fileTypes:Array = new Array();
    var imageTypes:Object = new Object();
    imageTypes.description = "Images (*.jpg, *.jpeg, *.gif, *.png)";
    imageTypes.extension = "*.jpg; *.jpeg; *.gif; *.png";
    fileTypes.push(imageTypes);

    var fileListener:Object = new Object();
    var btnListener:Object = new Object();
    var fileRef:FileReference = new FileReference();
    fileRef.addListener(fileListener);
    fileRef.browse(fileTypes);

    fileListener.onCancel = function(file:FileReference):Void
    {
      _root.resultsTxtField.text += "File Upload Cancelled\n";
    }

    fileListener.onSelect = function(file:FileReference):Void
    {
      _root.resultsTxtField.text += "File Selected: " + file.name + " file size: "+ file.size + " file type: " + file.type;
      getURL("javascript:hello("+file.size+");");
    }
}

У меня есть только одна сцена, и этот код находится в корне этой сцены. и у меня есть один клип uploadButton и имеет только прямоугольник, который работает как кнопка в этом примере.
когда вы нажимаете на прямоугольник browse_file("Hello World! from Flash"); Вызов и браузер, который вы можете выбрать фотографию для загрузки.
когда вы нажимаете на browse в HTML тот же процесс должен сделать, но, как вы видите, переменная отправить в функцию, но browser выбрать фотографию больше не открывал.
Я пробую несколько способов. например я установил новую функцию, чтобы открыть только picture browser или установите новую сцену или используйте gotoAndPlay и другие, но есть другая проблема.

Вы можете скачать мой источник по ссылке ниже:
http://www.4shared.com/zip/YTB8uJKE/flash_uploader.html
обратите внимание, что JavaScript onclick="sendToFlash('Hello World! from HTML');" не работать в прямом открытии. Вы должны открыть его в localhost.

Я буду так счастлив за любую подсказку.
Спасибо большое
Реза Амя

2 ответа

После дневного чтения я знаю, что это невозможно по соображениям безопасности.
тогда вы не можете открыть ссылку на файл с addCallback Код JavaScript в любом случае. для получения дополнительной информации прочитайте fileReference обзор из js, имитировать нажатие клавиш во временном обходе Flash


еще раз спасибо
Реза Амя

Вы не можете программно позвонить browse(), это должно быть от щелчка мыши внутри Flash: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html()

В Flash Player 10 и Flash Player 9 Update 5 вы можете успешно вызывать этот метод только в ответ на пользовательское событие (например, в обработчике события для щелчка мыши или события нажатия клавиши). В противном случае вызов этого метода приводит к тому, что Flash Player выдает исключение Error.

Другие вопросы по тегам