2008-12-30 89 views
8

我的产品打开网页浏览器并将其指向包含本地Flash应用程序的HTML文件。如何以编程方式检测此文件是否成功加载,以及是否抛出异常?有没有办法使用Javascript来做到这一点?检测Flash应用程序是否使用Javascript正确加载?

从外部检查文件是否存在于磁盘上是不够的,因为我看到其他故障发生(可能涉及竞争条件)。

回答

11

回答我的问题:https://sourceforge.net/forum/message.php?msg_id=5929756

  1. 定义,如果闪存加载应调用JavaScript函数。
  2. 从Flash文件的顶部调用此方法。
  3. 使用计时器来检测回调是否永远不会被调用。
  4. 首选从Flash调用Javascript函数,而不是从Javascript调用Flash函数。无论哪种方式,你都无法调用尚未加载的函数。保证浏览器在从Flash中调用Javascript函数之前完成加载Javascript函数比保证Flash在从Javascript调用它之前完成加载Flash函数要容易得多。

下面是一个例子:

  • 我使用swfobject嵌入Flash。
  • 我使用FlashVars来告诉Flash要调用哪个Javascript函数。如果页面上有多个Flash对象,这非常有用。

闪存

var params:Object = LoaderInfo(this.root.loaderInfo).parameters; 
if (ExternalInterface.available) 
{ 
    var onLoaded:String = params["onLoaded"]; 
    if (onLoaded != null) 
     ExternalInterface.call(onLoaded, true); 
} 

的Javascript

var flashLoaded = false; 
var flashTimer; 

function onFlashLoaded() 
{ 
    flashLoaded = true; 
    clearTimeout(flashTimer); 
} 

function onFlashTimeout() 
{ 
    if (!isFlashLoaded) 
    { 
     // Remove the Flash object in case it is partially loaded 
     $("#videoFeed").empty(); 
     $("#videoFeed").append('<div id="flashObject"></div>'); 
     alert("Failed to load video player"); 
    } 
    clearTimeout(flashTimer); 
} 

function connectToVideo() 
{ 
    var flashvars = {}; 
    flashvars.onLoaded = "onFlashLoaded"; 

    var params = {}; 
    params.menu = false; 

    var attributes = {}; 

    isFlashLoaded = false; 
    flashTimer = setTimeout("onFlashTimeout()", 5000); 

    swfobject.embedSWF("flash/VideoFeed.swf", "flashObject", "800", "600", "11", "expressInstall.swf", flashvars, params, attributes); 
} 
+1

辉煌!这对今天会有很大的帮助:D – 2009-12-23 22:42:23

3

实际上,当HTML页面完成加载,Flash内容可能不被完全加载呢。如果SWF没有完成加载,那么它会显示失败。

我通常建议的方法是在调用文档类构造函数时立即通过ExternalInterface让SWF调用JavaScript函数。基本上,假设除非调用JS函数,否则SWF加载失败。

+0

够公平了,但我需要更具体的方法来检测是否发生故障。超时不够可靠。 – Gili 2009-01-06 06:15:54

+0

这种方法的一个问题是,在同一页面上不能有两个闪存实例。或者至少你不知道哪一个触发了回调。 – zimbatm 2010-07-16 00:29:38

相关问题