【问题标题】:File dialog is not showing from flex function文件对话框未从 flex 功能显示
【发布时间】:2013-01-22 10:08:10
【问题描述】:

我正在尝试使用 ExternalInterface 和 addCallback 从 javascript 执行 flex 函数:

<s:Application 
  xmlns:fx="http://ns.adobe.com/mxml/2009" 
  xmlns:s="library://ns.adobe.com/flex/spark" 
  xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="initApp()">

import flash.external.*;
import flash.net.FileReference;

public function initApp():void {
  ExternalInterface.addCallback("sendTextFromJS", receiveTextFromJS);
}

public function receiveTextFromJS(s:String):void {
  l1.text = s;
  var myFileReference:FileReference = new FileReference();
  myFileReference.browse();
}

但由于某些原因,文件对话框没有显示,但 ID 为 l1 的标签中的文本已更改。

【问题讨论】:

    标签: actionscript-3 apache-flex externalinterface


    【解决方案1】:

    FileReference.browse 操作只能在响应用户操作(鼠标事件或按键事件)时调用,因此您必须修改代码以获得用户操作,例如您可以使用警报:

            public function receiveTextFromJS(s:String):void {
                Alert.show("Browse for files?", "", Alert.OK | Alert.CANCEL, null, onAlert);
            }   
    
            private function onAlert(event:CloseEvent):void
            {
                if(event.detail == Alert.OK)
                {
                    var myFileReference:FileReference = new FileReference();
                    myFileReference.browse();
                }
            }
    

    【讨论】:

    • 我明白了,但我想通过单击 javascript 按钮打开文件对话框 (FileReference),而不是直接与 flash 交互,而是与 ExternalInterface 间接交互。还是有模拟用户操作的方法?
    • 不行,用户动作必须在flash中的调用栈中,你要按照这个要求来组织应用逻辑和UI。没有这样的操作,就无法模拟用户操作或显示浏览器对话框,这是出于安全和隐私的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2016-05-30
    • 2017-02-05
    相关资源
    最近更新 更多