我的产品打开Web浏览器并将其指向包含本地Flash应用程序的HTML文件.如何以编程方式检测此文件是否已成功加载,以及是否未引发异常?有没有办法用Javascript做到这一点?
从外部检查文件是否存在于磁盘上是不够的,因为我已经看到其他故障发生(可能涉及竞争条件).
回答我自己的问题:https://sourceforge.net/forum/message.php?msg_id = 5929756
定义一个Javascript函数,如果加载Flash应该调用它.
从Flash文件的顶部调用此方法.
使用计时器检测是否从未调用回调.
更喜欢从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); }
使用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(''); 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); }