在Linux上使用creationComplete事件将函数注册为闪存上的回调失败

Posted

技术标签:

【中文标题】在Linux上使用creationComplete事件将函数注册为闪存上的回调失败【英文标题】:registering a function as callback on flash using creationComplete event fail on linux 【发布时间】:2011-01-13 18:28:02 【问题描述】:

我在 flash builder 4 上创建了一个 flex 项目。 在 MXML 中我有

 xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="init();"

并检查它是否运行

<![CDATA[
            private function init():void
            
                ExternalInterface.addCallback("Submit", submit);
                txtFirstName.text = "fkjkdshf";
                //txtFirstName.text = ExternalInterface.available.toString();
            

我导出了创建 SWF 文件的发布版本。

当我在 Windows 上使用 Firefox 打开文件时,很明显该事件已采取行动 -> 文本框值发生了变化。

当我在 LINUX 上的 Firefox 上打开文件时,文本值没有改变,因此没有执行 creationComplete 事件。

我的目标是设定

ExternalInterface.addCallback("Submit", submit);

这样我就可以从 Qt 应用程序中调用它。

我已经检查过,两个平台上都使用了相同的 Flash Player。

这似乎是 Linux Flash 插件的一个错误。

我怎样才能克服这个问题,并注册“提交”?

【问题讨论】:

这与 Qt(标签的 b/c)有什么关系? 也许这在 ExternalInterface.addCallback 上失败了,而您只是没有看到错误,在 init 方法中添加一个跟踪语句并使用 FlashTracer 或 Vizzy 来观察正在运行的 swf 的跟踪输出可能会让您更接近解决方案,我最好的猜测是它与 linux vs windows 中的区分大小写有关,因为这是我在切换系统进行开发或部署时遇到的最常见错误。也可能只是尝试从提交更改为其他一些肯定没有保留的词,例如 mySpecialSubmit。 【参考方案1】:

事件处理程序应该是applicationComplete,而不是creationComplete。

【讨论】:

wietseveenstra.nl/blog/2007/02/… 我看不出有任何理由,他不应该看到这两个事件都被触发并因此被处理,尽管您可能是正确的 applicationComplete 可能是一个更合适的时间这个方法调用。 @shaunhusain:是的,这两个事件都会被触发,但我认为不能保证ExternalInterface 会以您期望的方式可用,直到应用程序实际放置在舞台上并且所有初始化完成。我怀疑这是浏览器行为不同的原因。 还不错,我只是想澄清一下,这两个事件实际上都应该被触发,并且我在这里没有遗漏任何东西,感谢您的澄清,同意这可能是一个问题。【参考方案2】:

据我记忆中的错误

ExternalInterface.addCallback("Submit", submit);

安全设置在 Win 和 Linux 之间的行为不同。在我的 Linux 平台上,我必须使用“Global Security Settings panel”配置闪存以信任 SWF 文件和外部可执行文件

请注意,此工具非常时髦 - 您在此页面上看到的闪存实际上控制着您计算机上的安全设置。此工具选项中的“始终允许”也不起作用。

【讨论】:

以上是关于在Linux上使用creationComplete事件将函数注册为闪存上的回调失败的主要内容,如果未能解决你的问题,请参考以下文章

Flex中的initialize,creationComplete和applicationComp

Flex 页面启动事件

Flex:鼠标悬停时突出显示元素

当应用程序启动时有两种状态时将焦点设置在 TextField 上

将文件拖放到应用程序

如何在可编辑的 TextArea 中禁用回车?