莫名的IE中无法运行Flex(swf)程序的问题[已临时解决]

 (问题已临时解决,不想关心细节者可直接阅读文章尾部的总结部分)

 

 今日打开FlexBuilder,继续昨日的Project,莫名的出现如下问题:

 

1)程序编译后按F11 debug,在IE中无法运行,IE中显示如下文字

 

 Alternate HTML content should be placed here. This content requires the Adobe Flash Player. Get Flash

 

2)同时伴随现象:Flex Start Page无法打开,显示错误信息

 

The Flex Start Page requires the Adobe Flash Player. Please use the installers in the Flex Builder 3/Player/ folder to install the Adobe Flash Player into your default browser.

 

 

难道Flash插件被莫名卸载了?

 

于是尝试重装Flash插件。

 

直接安装 未解决

卸载 -> 安装 未解决

卸载 -> 安装 -> 重启 未解决

 

很挠头.到底什么原因呢?此时又发现如下现象:

 

1)访问Adobe网站,首页Flash显示正常

2)访问Sina,广告Flash显示正常

 

看来,Flash插件已经被正确安装了,问题出在Flex应用程序显示的地方,那就从Flex Start Page开刀查找问题。

1)放到IE中,无法显示

2)放到Firefox中,显示正常....

 

逐步跟踪调试..发现,原来是 AC_OETags.js 中有一个 isWin 变量本应是 true,此时却变成了 false。

该处代码为:

var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;

进一步调查发现,运来问题出在 navigator.appVersion 这个属性上。正常的情况下,该属性包含操作系统信息,如Windows NT 5.1,但此时该属性只有浏览器信息,操作系统信息丢失了。

手动修改 AC_OETags.js ,将 isWin 强制设为 ture,刷新...Ok,久违的程序界面出现了,一切正常。

不过,navigator.appVersion 因何而变了呢?...

 

查找注册表中与此相关的数据 - 没有异常

搜寻IE如何读取系统信息并写入navigator.appVersion 的资料 - 未果

看来走这条路耗费时间太长,换一个思路解决问题。

 

经分析,Flex build输出目录中的 AC_OETags.js 是从原始模板中复制过来的,那么找出原始模板文件,统一将isWin变量设定为true应该可以解决问题。于是搜索到Flex Builder目录中的所有 AC_OETags.js,统一增加了isWin = true的代码。(其实最关键的 html-templates.zip 中的文件需要替换,其他的不重要;同时注意已经建立的 project 中已经在项目建立时从模板中复制出了此js,build时使用的是 project 目录中的文件,要注意修改此处的文件) 经过一番折腾,问题迎刃而解。

 

总结:

 

问题现象:

 

1)Flex build 好的程序无法在IE中正常显示,页面提示需安装Flash Activex

2)系统中实际已安装Flash Activex

3)访问大多数网站上的Flash显示正常

4)Flex 应用程序在 Firefox 中运行正常

 

直接原因:

 

1)IE浏览器的 navigator.appVersion 属性本应包含的操作系统信息莫名消失

 

解决方法:

 

1)如遇此问题,可通过修改所有 AC_OETags.js 强制增加 isWin = true 解决。

2)如果感觉方案1麻烦或风险较高,可以只修改 project 中的 AC_OETags.js。

 

遗留问题:

 

IE的 navigator.appVersion 到底为何缺少了操作系统信息依然未知,该问题可能会影响到其他Web应用的使用,如有达人了解此问题的缘由,望不吝赐教。

 

 

本文章没有任何技术突破,仅用于协助遇到同样问题的同仁解决问题,节省不必要的时间浪费,将精力用于更重要的事情之上。

你可能感兴趣的:(Flex/Flash/AS3)