使用Javascript检测Flash应用程序是否正确加载?

时间:2008-12-30 01:51:00

标签: javascript flash

我的产品会打开一个Web浏览器,并将其指向包含本地Flash应用程序的HTML文件。如何以编程方式检测此文件是否已成功加载,以及是否未引发异常?有没有办法用Javascript做到这一点?

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

4 个答案:

答案 0 :(得分:12)

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

  1. 定义一个Javascript函数,如果加载Flash,应该调用它。
  2. 从Flash文件的顶部调用此方法。
  3. 使用计时器检测是否从未调用回调。
  4. 首选从Flash调用Javascript函数,而不是从Javascript调用Flash函数。无论哪种方式,您都无法调用尚未加载的函数。在从Flash调用它之前,保证浏览器已经完成加载Javascript函数要容易得多,而不是保证Flash在从Javascript调用它之前完成加载Flash函数。
  5. 以下是一个例子:

    • 我正在使用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 :(得分:4)

如果您无法修改swf并且无法添加ExternalInterface,您仍然可以使用Javascript来获取swf的状态。例如,您可以从Javascript调用document.getElementById(swf_id).PercentLoaded(),并等待它为100.

如果swf无法加载,那不会告诉你抛出了什么异常,但至少你会确定它是否已加载。其他有用的电话可在此处找到: http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html

答案 2 :(得分:3)

实际上,当HTML页面加载完毕后,Flash内容可能还没有完全加载。如果SWF未完成加载,则它似乎已失败。

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

答案 3 :(得分:1)

根据adobe ExternalInterface文档: http://livedocs.adobe.com/flex/3/langref/flash/external/ExternalInterface.html 如果启用了pop-blocker,某些Web浏览器会限制通过文档类构造函数中的ExternalInterface调用Javascript函数。

是否还有其他解决方案可以检测swf影片何时成功加载?