隐藏和显示 swf 时如何判断 ExternalInterface 何时可用

Posted

技术标签:

【中文标题】隐藏和显示 swf 时如何判断 ExternalInterface 何时可用【英文标题】:How to tell when ExternalInterface is available when hiding and showing a swf 【发布时间】:2014-12-28 06:55:12 【问题描述】:

我有一个带有一些使用 ExternalInterface 注册的 js 回调的 swf。我反复隐藏和显示 swf,并且我了解到在隐藏 swf 时 ExternalInterface 不可用。我还注意到每次再次显示时都会调用 swfs 构造函数,我用它来确保在 ExternalInterface 函数可用之前不会尝试调用它。这让我想知道是否还有某种方法可以可靠地从 swf 内部分辨出它何时被隐藏?我知道 as3 类没有析构函数,但是在 swf 再次变得不可用之前,有什么类似的东西可以用来触发 ExternalInterface 事件吗? REMOVED_FROM_STAGE 似乎无助于检测到这一点,因为它根本不会触发。

顺便说一句,我使用了几种隐藏和显示方法。有时使用 Angular 的 ng-hide/ng-show,有时 swf 在引导模式窗口内。

另外,我注意到 Flash Builder 可以通过某种方式判断 swf 何时卸载。我可以在嵌入式<object> 上添加一个设置“显示:无”的按钮,然后在 Flash Builder 的控制台中收到 [Unload SWF] 消息。这只是调试播放器的一个功能,还是 Flash Builder 知道我还没有找到一些秘密事件?

【问题讨论】:

嗯,好问题。作为一种解决方法,您始终可以在隐藏之前手动将事件从 JS 发送到 SWF。 无论你在做什么,它似乎都在完全卸载 swf。因此,并不是 ExternalInterface 不可用,而是 swf 根本不再运行/加载。你使用的是什么浏览器?你能设置一个小提琴吗? 我在 chrome 中,我实际上只是在做 flashPlayer.style.display = 'none';这就是立即卸载 swf。 嗯,有几种方法可以隐藏您的 SWF 应用程序。您可以显示:无,或设置可见性:隐藏。您还可以使用绝对 pisitioning 并将其移出屏幕。在最后一种情况下,您还应该查看 SWF 的 hasPriority 参数。但我建议你看两个链接:***.com/questions/2610976/… 和 ***.com/questions/1587087/… 是的,目前正在使用绝对位置离屏方法解决此问题。忘记更新了,谢谢! 【参考方案1】:

您可以使用此代码检查 SWF 是否可以调用 ExternalInterface:

if(ExternalInterface.available) 
    ExternalInterface.call("console.log","hello browser");

【讨论】:

以上是关于隐藏和显示 swf 时如何判断 ExternalInterface 何时可用的主要内容,如果未能解决你的问题,请参考以下文章

如何隐藏嵌入式 swf 的文件名?

我在玩 swf 游戏时如何阻止聊天窗口弹出?

ActionScript 能否判断 SWF 何时发布?

js如何判断div里面的图片为空隐藏,否则显示,如下图?

js中如何判断一个层是不是隐藏

vue实现图片隐藏判断支付成功后怎么显示图片