Зачем вызывать функцию 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.