检测Flash应用程序是否使用Javascript正确加载?
我的产品打开网页浏览器并将其指向包含本地Flash应用程序的HTML文件。如何以编程方式检测此文件是否成功加载,以及是否抛出异常?有没有办法使用Javascript来做到这一点?检测Flash应用程序是否使用Javascript正确加载?
从外部检查文件是否存在于磁盘上是不够的,因为我看到其他故障发生(可能涉及竞争条件)。
回答我的问题:https://sourceforge.net/forum/message.php?msg_id=5929756
- 定义,如果闪存加载应调用JavaScript函数。
- 从Flash文件的顶部调用此方法。
- 使用计时器来检测回调是否永远不会被调用。
- 首选从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);
}
Acording到Adobe ExternalInterface的文件:如果启用了弹出窗口拦截器 http://livedocs.adobe.com/flex/3/langref/flash/external/ExternalInterface.html 某些Web浏览器限制调用文档类的构造函数通过ExternalInterface的JavaScript函数。
是否有任何其他解决方案来检测SWF电影已成功加载?
在无法修改swf并添加ExternalInterface的情况下,您仍然可以使用Javascript来获取swf的状态。例如,您可以从Javascript调用document.getElementById(swf_id).PercentLoaded(),并等待它为100。
这不会告诉你什么异常是如果swf加载失败,但至少你会知道它是否加载。其他有用的电话在这里找到: http://www.adobe.com/support/flash/publishexport/scriptingwithflash/scriptingwithflash_03.html
辉煌!这对今天会有很大的帮助:D – 2009-12-23 22:42:23