(问题已临时解决,不想关心细节者可直接阅读文章尾部的总结部分)
今日打开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应用的使用,如有达人了解此问题的缘由,望不吝赐教。
本文章没有任何技术突破,仅用于协助遇到同样问题的同仁解决问题,节省不必要的时间浪费,将精力用于更重要的事情之上。