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

Gil*_*ili 8 javascript flash

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

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

Gil*_*ili 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函数.

这是一个例子:

  • 我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)

使用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);
}
Run Code Online (Sandbox Code Playgroud)