最近在作网页设计的时候,无意间发现IE浏览器打开含有Flash的页面的时候,总会有 个粗粗的框子,而且对于还有脚本的Flash不能自动播放,当鼠标移动上去的时候,会出来一行提示,“单击以激活控件”,刚开始我还很纳闷,以为是什么 IE自带的加载项禁用了Flash,结果查了半天,没有发现任何异常插件。于是上Google一搜,结果出来了,原因在于我的机器安装了微软的一个新的 IE非安全更新KB912945。
Microsoft 最初在 2006 年 2 月 28 日发布了安全通报MS06-013,讨论 Internet Explorer 的非安全更新 912945。应用此更新之后,只有当客户手动激活其用户界面时,他们才能够与某些网页中加载的 Microsoft ActiveX 控件进行交互。 他们可以通过单击用户界面或使用 Tab 键和 Enter 键来达到目的。受到这一改动影响的程序包括程序包括以下这些: Adobe Reader,Apple QuickTime Player,Macromedia Flash,Microsoft Windows Media Player,Real Networks RealPlayer,Sun Java Virtual Machine。Microsoft 更改 Internet Explorer 中 ActiveX 控件的原因居然是因为把Microsoft 牵涉在内的“Eolas Technologies 和 加利佛尼亚大学董事会与 Microsoft”专利侵权案(Eolas 与 Microsoft)有关,很荒唐的理由吧,哈哈。
目前对于普通用户而言最大的别扭就是每次看 含有script代码flash的时候都必须先按一下,flash才可以播放。如果你觉得这个更新搞的你看网页很别扭,鼠标移动上去会出现一个大大黑框 框,你可以点控制面版-添加删除程序-选中显示更新复选框,在windows XP软件更新-那一长串里面找到windows XP非安全更新- KB912945,点卸载,如果没有看到这个选项的化就比较麻烦了,你的机器可能装上了Internet Explorer 的累积性安全更新 KB912812,以前的KB912945也被包含到这个补丁里面了。这个补丁最好不要卸载。他包含了一些高危险IE漏洞的补丁集合。遇到这个补丁,只好 自认倒霉了,微软暂时还没有针对个人用户更好的解决方案。或者你换浏览器,比如FireFox就是一个比较好的选择。
对于网络开发者来说,当客户 系统使用IE并安装了这个补丁后,就会出现刚才说的情况,凡是一个页面内所有<object>、<embed> 或 <applet> 编码的活动内容都不会被自动激活,需要用户手动点击,微软官方给出目前的解决方法用外部调用JS代码的document.write方法,把< object>、<embed> 或 <applet> 编码的活动内容写入你的页面中,才可以自动激活,注意一定要是外部调用JS代码,在把JS代码和页面写在同一个文件中调用是不可以自动激活的。
例如你现在有一段object代码如下
<object classid="clsid:xxxxxxxxxxx..." ...>
    <param name="xxxx" value="xxx.swf">
</object>
先在站点创建一个.JS 文件,假设为 temp.js 文件。编写以下代码
function temp()
{
    document.write('<object classid=" xxxxxxxxxxx..." ...>\n');
    document.write('<param name="xxxx" value="xxx.swf" />\n');
    document.write('</object>\n');
}
在你的网页的<head>标记体里面插入
<script src="temp.js" type="text/javascript"></script>
然后替换你原来网页的那段<object>标签
还有一种方法是利用JS代码的document.createElement方法,例如
//createElementExplicit.js
var myObject = document.createElement('object');
DivID.appendChild(myObject);
myObject.width = "200";
myObject.height = "100";
myObject.classid= "clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6";
myObject.URL = "example.wmv";
myObject.uiMode = "none" ;
然后直接在页面里面引用这个函数
<html>
  <body>
    <div id="DivID">
      <script src="createElementExplicit.js"></script>
  </body>
</html>
如果你页面的活动内容很多,要一个JS一个JS的写,非常麻烦,你可以写一个带参数的JS函数,然后在适当的位置调用JS代码,例如下面的例子
// external_script.js
function CreateControl(DivID, CLSID, ObjectID,
                       WIDTH, HEIGHT, URL, AUTOSTART)
{
  var d = document.getElementById(DivID);
  d.innerHTML =
    '<object classid=' + CLSID + ' id=' + ObjectID +
    ' width=' + WIDTH + ' height=' + HEIGHT +'>
    <param name="URL" value=' + URL + '>
    <param name="autoStart" value=' + AUTOSTART + '/>';
}
HTML里面如下
<html>
<head>
   <script src="external_script.js" language="JScript"></script>
</head>
<body>
   <script language="JScript">
     CreateControl( "EXAMPLE_DIV_ID",
                    "clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6",
                    "EXAMPLE_OBJECT_ID", "600", "400", "example.wmv",
                    "-1")
   </script>
</body>
</html>
不 过切记,上述三种方法都依赖 JavaScript。就是说如果客户机IE中, 禁用了 JavaScript。上述建议的方法对这些用户就不起作用, 他们还是要手动点击以激活控件。我个人觉得微软IE这次更新很失败,给广大开发者带来了很大麻烦,希望微软能够尽快给出一个更好的解决方案。
posted on 2007-06-13 20:06  mecn  阅读(952)  评论(0编辑  收藏  举报