【问题标题】:Unable to communicate with Javascript from Flex after dymanically loading a swf动态加载 swf 后无法与 Flex 中的 Javascript 通信
【发布时间】:2009-09-04 03:59:57
【问题描述】:

出于某种原因,每当我通过写入 div 在 $(document).ready() 上动态加载 swf 时,我都无法对浏览器进行 javascript 调用。具体来说,对浏览器的所有调用都返回“null”。在页面加载时正常嵌入 swf 时不会发生这种情况,但我想阻止加载 swf 直到指定的时间点。

这到底是怎么回事?动态嵌入 swf 以防止 swf 与浏览器对话有什么特别之处吗?方法被调用(我已经通过显示警报证明了这一点),但所有返回到 any 函数的值,无论返回的类型如何,在它到达 flash 时都显示为 null。

这是 flex 的错误,还是我完全遗漏了什么?这让我很头疼。

【问题讨论】:

    标签: javascript jquery apache-flex actionscript-3


    【解决方案1】:

    切换到 swfobject2.2 嵌入 swf 神奇地缓解了这个问题。

    【讨论】:

      【解决方案2】:

      我假设您使用的是 ExternalInterface.call(或者可能是 .addcallback)?可以贴一些代码(尤其是 JS 方面的)吗?

      【讨论】:

      • 是的,ExternalInterface.call。函数 myFunc() { 返回“嘿”;在 flash 中我得到 null。
      • 我正在使用 swfobject 嵌入 swf,覆盖 document.write 以在页面加载后写入 div。
      • 我所说的 swfobject 是指 Adob​​e Deployment Toolkit。这将改变。
      • 查看此页面:livedocs.adobe.com/flex/3/html/… 这部分很有趣:“...无法保证 SWF 文档会在 HTML 页面上的第一个 JavaScript 运行之前注册其回调。对于因此,在从 JavaScript 调用 SWF 文档中的函数之前,您的 SWF 文档应始终调用 HTML 页面以通知它 SWF 文档已准备好接受连接。”该文档具有确保 JavaScript 和 SWF 可以通信的技术。 (感谢您提出这个问题,我学到了很多东西。)
      【解决方案3】:

      我遇到了这个确切的问题,并使用 Prototype PeriodicalExecuter 以这种(有点恶心)的方式解决了它:

      Event.observe(window, 'load', function() {
        //Check to see if the flash function is available once per second.
        new PeriodicalExecuter( function(pe) {
            var flash = $('flashObject');
      
            if(typeof flash.myFlashFunc == 'function'){
                //At this point, the flash function is available
                pe.stop()
            }
        }, 1);
      });
      

      更新到最新版本可能是最好的方法。我必须尝试一下。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-22
        相关资源
        最近更新 更多