到目前为止,我一直在使用ExternalInterface,在极少数情况下我需要与HTML进行通信。
答案 0 :(得分:7)
FlashVars并不是更好或更糟。这是不同的。它允许您在加载时将一些数据传递给swf 。如果你需要的只是最初传递一些上下文,FlashVars就是你想要的。
现在,如果你的swf和它的主机之间需要更多的交互(在大多数情况下它是一个可以运行Javascript的Web浏览器),ExternalInterface可以提供帮助。
如果要将数据从swf传递到主机,请使用AS端的ExternalInterface.call并在html上设置相应的JS函数。如果通信反过来,请从AS端使用ExternalInterface.addCallback并使用JS函数在html上调用此回调。当然,如果需要,可以同时使用call和addCallback。但大多数情况下,我只使用ExternalInterface.call,因为我主要使用这种机制来调用谷歌分析或其他一些跟踪系统。
ExternalInterface的一个重要方面是,为了成功,必须加载swf和处理通信的JS代码。如果您考虑一下这一点,这是显而易见的,但如果您不考虑它,可能会导致问题。也就是说,如果从JS中调用一个尚未在swf中作为回调添加的函数,那么......它将不会被调用。反过来也是如此,尽管在实践中它更为罕见。