我的产品会打开一个Web浏览器,并将其指向包含本地Flash应用程序的HTML文件。如何以编程方式检测此文件是否已成功加载,以及是否未引发异常?有没有办法用Javascript做到这一点?
从外部检查文件是否存在于磁盘上是不够的,因为我已经看到其他故障发生(可能涉及竞争条件)。
答案 0 :(得分:12)
回答我自己的问题:https://sourceforge.net/forum/message.php?msg_id=5929756
以下是一个例子:
<强>闪存强>
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影片何时成功加载?