0

我第一次来这里。

我的问题在于 AS3、Javascript 以及可能的浏览器 Firefox 和 IE。

我已经做了很多寻找答案的工作,所以我将打印我的代码:

我正在使用这一行来调用 flash 应用程序,并且在所有浏览器中它的可战斗性和实际跟踪在 firebug 中保存一个 OBJECT->FLASH_ID,所以这不是问题。

var obj = document.getElementById('test');

然后我使用addcallback:

obj.sendStatus(loggedIn);

现在奇怪的是我用铬追踪所有单独的元素

  1. -obj = 闪存对象
  2. -sendStatus = flash->函数
  3. -loggedIn = false 或 true;

一切都很好,但是当我在 Firefox 上时,或者它的追踪方式不同

  1. -obj = 闪存对象
  2. -sendStatus = 未定义
  3. -loggedIn = true 或 false;

现在我错过了什么?????????

  1. 我尝试嵌入而不是对象插入
  2. 我确保 id 都是唯一的
  3. 我检查以确保我使用 getElementById 选择了正确的 Flash 对象

我很困惑..感觉很简单。

4

3 回答 3

0

我知道一些与浏览器相关的计时问题,使 Flash 对象的接口可用......

计时器可能会有所帮助,试试这个:

var obj = document.getElementById('test');
setTimeout(function(){obj.sendStatus(loggedIn);}, 500);

500 有点长,但可以肯定的是。如果有效,您可以尝试将其降低到 200 - 300。

于 2012-07-08T08:32:12.463 回答
0

问题是使用ExternalInterface需要双方(browserflash)都准备好。

您可以让 flash 轮询页面中的一个方法,该方法只返回 true,以便您知道它已准备好接收来自 flash 的调用。

另一方面,如果页面被缓存,有时可能会发生页面想在闪存准备好之前发送到闪存,所以我使用一个回调页面告诉它闪存准备好,所以它就像一个握手,一旦双方准备好了,那么我们就可以开始来回发送数据了。

这是我自 Firefox 3 以来的方法。

于 2012-07-09T08:40:04.997 回答
0
  1. 确保您在嵌入标签和对象标签中都声明了 allowScriptAccess = sameDomain 以防您不使用 swfObject

  2. 也许你获得对 swf 的引用的方式是错误的,试试这个

    function thisMovie(movieName) {
         if (navigator.appName.indexOf("Microsoft") != -1) {
             return window[movieName];
         } else {
             return document[movieName];
         }
     }
    

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html

于 2012-07-08T15:41:11.560 回答