我需要从javascript调用flash函数。我使用flash.external和addCallback来做到这一点。所有东西都运行良好但是当我在我的flash中使用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>
当我点击html页面中的Browse
时,javascript调用sendToFlash函数,SendToFlash
函数将我的字符串(Hello World!来自HTML)发送到flash。
在flash中我得到以下代码的字符串:
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");
并打开浏览器时,您可以选择要上传的照片
当您点击html中的browse
时,必须执行相同的处理,但是当您看到变量发送到功能但browser
选择照片时不再打开。
我尝试了几种方法。例如,我设置新功能只打开picture browser
或设置新场景或使用gotoAndPlay等,但还有另一个问题。
你可以从下面的链接下载我的来源:
http://www.4shared.com/zip/YTB8uJKE/flash_uploader.html
请注意,javascript onclick="sendToFlash('Hello World! from HTML');"
无法直接打开。你必须在localhost中打开它。
任何线索我都会非常高兴
非常感谢
Reza Amya
答案 0 :(得分:0)
您无法以编程方式致电browse()
,必须通过鼠标点击Flash内部:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#browse()
在Flash Player 10和Flash Player 9 Update 5中,您只能调用 此方法成功响应用户事件(例如,在 用于鼠标单击或按键事件的事件处理程序。除此以外, 调用此方法会导致Flash Player抛出错误 异常。
答案 1 :(得分:0)
addCallback
javascript代码打开文件引用。有关详细信息,请阅读fileReference browse from js, simulate keypress in flash workaround
再次感谢
Reza Amya