swfobject 检测 swfurl 状态 404

Posted

技术标签:

【中文标题】swfobject 检测 swfurl 状态 404【英文标题】:swfobject detect swfurl status 404 【发布时间】:2016-03-06 20:49:56 【问题描述】:

我有以下代码,

var flashvars = ;
flashvars.src = "path-to-src";
flashvars.controlBarAutoHide = "false";
flashvars.poster = "path-to-thumbnail";
flashvars.autoPlay = "false";

var attributes = ;

var params = ;
params.wmode = "transparent";
params.allowfullscreen = "true";

var callbackfn = function(e)
//    console.log(e)


swfobject.embedSWF("http://fpdownload.adobe.com/strobe/FlashMediaPlayback.swf", "altContent", "800", "500", "10.2.0", "/path-to/expressInstall.swf", flashvars, params, attributes, callbackfn); 

上面代码中的 swfurl 即(http://fpdownload.adobe.com/strobe/FlashMediaPlayback.swf)给我 404 错误,因此视频无法播放

Qn:

    有没有办法,如果 swfurl 是 404 那么我们可以用其他 url (path-to-self-domain-swf) 替换它

    我也试过checking broken URL,但由于交叉 域策略它没有给我想要的 swfurl 状态结果

【问题讨论】:

【参考方案1】:

SWFObject 没有任何检查 404 状态的特性或能力。实际上,只要将 SWF 的标记成功添加到页面,它就会报告嵌入成功。它不会验证 SWF 是否实际加载和播放。

撇开 SWFObject 不谈,跨域客户端 404 检测实际上是不可能的。最常见的建议是使用 AJAX 尝试加载文件,但是在跨域时会失败。如果您在加载文件时检查错误,您将看不到有关错误的详细信息(404 与 403 或 500 等)。这种方法在页面加载时间和网络请求方面也很昂贵——您将尝试加载文件两次。

我要做的——这是一个技巧——尝试像往常一样加载您的 SWF,但附加一个轮询 Flash Player 的计时器以确保文件正在实际加载。如果您在给定的时间范围内没有看到加载百分比的任何进展,则可以认为 SWF 不可用并且加载失败。

例如(操作顺序):

加载 SWF 等待一两秒 轮询 SWF 以检查 PercentLoaded 值 如果值大于 0,则假定 SWF 可用。 如果值仍然设置为“0”,请稍等片刻,看看它是否只是网络故障。 轮询 SWF 以检查 PercentLoaded 值 如果值大于 0,则假定 SWF 可用。 如果值仍设置为“0”,则假定 SWF 不可用(我们不知道为什么)。使用您的后备方案。

此处提供了使用 SWFObject 轮询 SWF 的 PercentLoaded 值的示例:http://learnswfobject.com/advanced-topics/executing-javascript-when-the-swf-has-finished-loading/index.html

【讨论】:

谢谢,这似乎是一个实用的解决方案,到目前为止我已经添加了备用 swf。我会尝试上面的代码并更新你一些时间

以上是关于swfobject 检测 swfurl 状态 404的主要内容,如果未能解决你的问题,请参考以下文章

SWFObject 1.5/IE6 JQUERY兼容

swfobject和flash外部接口

SWFObject是什么

如何使用 swfobject 通知 HTML 容器 SWF 已完成

无法让 swfobject 2.3.2 在 Firefox、Chrome 或 Safari 上运行

SWFObject / 加载 smil 文件