最近在用FLEX写东西,运行HTML时候总提示:Alternate HTML content should be placed here. This content requires the Adobe Flash Player,开始以为FLASH版本问题,重新装了几次还是老样子,打开JS文件调试了会,终于知道问题出在哪了。
在生成的JS文件中有段这样的语句:
function ControlVersion()
{
var version;
var axo;
var e;
// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
try {
// version will be set for 7.X or greater players
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
version = axo.GetVariable("$version");
} catch (e) {
}
if (!version)
{
try {
// version will be set for 6.X players only
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
// installed player is some revision of 6.0
// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
// so we have to be careful.
// default to the first public version
version = "WIN 6,0,21,0";
// throws if AllowScripAccess does not exist (introduced in 6.0r47)
axo.AllowScriptAccess = "always";
// safe to call for 6.0r47 or greater
version = axo.GetVariable("$version");
} catch (e) {
}
}
if (!version)
{
try {
// version will be set for 4.X or 5.X player
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
version = axo.GetVariable("$version");
} catch (e) {
}
}
if (!version)
{
try {
// version will be set for 3.X player
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
version = "WIN 3,0,18,0";
} catch (e) {
}
}
if (!version)
{
try {
// version will be set for 2.X player
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
version = "WIN 2,0,0,11";
} catch (e) {
version = -1;
}
}
return version;
}
在IE7中运行这段代码的时候,函数最后会运行到,最后一个if(!verson),此时返回的是WIN 2,0,0,11,之后代码
又截取到版本为2并与你要求的FLASH版本号对比(如9),此时就提示你版本太低,产生这个原因,大约是因为FLASH并没有严格按照COM组件的标准,在获取版本号时产生错误,Firfox下 不会有这样的错误。
解决方法是,使用Firfox调试你的程序,或者修改
if (!version)
{
try {
// version will be set for 2.X player
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
version = "WIN 2,0,0,11";
} catch (e) {
version = -1;
}
}
为
if (!version)
{
try {
// version will be set for 2.X player
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
version=axo.GetVariable("$version");
} catch (e) {
version = "WIN 2,0,0,11";
}
}
这样就可以了,至于其他电脑上的兼容问题,有待进一步的调试。