标题说的有点夸张了,其实是M$的KB912945对今后IE的一些修改
据说是和专利纠纷有关,M$打算在不久后发布一个新的IE补丁,同时也将被IE7采用。这个补丁十分的荒唐:
大意是:在安装好本次更新后,除非你事先手动将页面上的ActiveX控件激活,否则无法和他们交户
直白点就是比如网页上的一个Flash游戏,你先要去点击他一下,让IE把它激活,然后开能开始进行正常操作,下面是装了这个补丁的IE的画面:
如果不做修改,以后我Blog上的那个Flash鼠标移上去是这样的,然后你必须去点一下激活它,而且如果页面上有3个Flash或者是MeidaPlayer控件或者是Java程序,那么每个都需要你去手动激活……
真不明白这样有什么好处……幸好只是阻断了与用户的交互,相当于调用了EnableWindow(hActiveXWin,flase);这样的API,插件的非交互性操作都是正常的,但每次要去点一下总是很不爽的。这个补丁在2个月内就会公开发表,所以还是早做准备为好
在MSDN上有一篇教开发人员如何应对此改动的文章,地址是:
里面最有价值的就是可以用JScript来绕过IE的阻挡,无须用户手动激活插件,大致方法就是把Object或者Applet块用document.write动态写入,同时包含此语句的JS必须是外部的.js文件,如果是该页面内的(inline)代码就无效了。
当然你也可以专门写个函数放在外部文件里,页面内再调用这个函数,以便应对不同情况,省得每个flash都要写长长的document.write了。
下面是我写的一个函数,常用的设置都包含了,不需要的项目就留空
function WirteFlashBlock(strURL,nWidth,nHeight,strBkColor,strID,strAlignMode,strQuality,strFlashVars)
{
var embedTxt;
embedTxt = <embed;
if (strURL==null)
{
return;
}
embedTxt += src=+strURL+;
document.write(<object classid=clsid:d27cdb6e-ae6d-11cf-96b8-444553540000 codebase=http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0);
if (nHeight)
{
document.write( height=+nHeight+);
embedTxt += height=+nHeight+;
}
if (nWidth)
{
document.write( width=+nWidth+);
embedTxt += width=+nWidth+;
}
if (strID)
{
document.write( id=+strID+);
embedTxt += name=+strID+;
}
if (strAlignMode)
{
document.write( align=+strAlignMode+);
embedTxt += align=+strAlignMode+;
}
document.write(>);
document.writeln(<param name=menu value=false>);
embedTxt += menu=false;
document.writeln(<param name=allowScriptAccess value=always />);
embedTxt += allowScriptAccess=always;
if (strFlashVars)
{
document.writeln(<PARAM NAME=FlashVars VALUE=+strFlashVars+>);
embedTxt += FlashVars=+strFlashVars+;
}
document.writeln(<param name=movie value=+strURL+ />);
if (strQuality)
{
document.writeln(<param name=quality value=+strQuality+ />);
embedTxt += quality=+strQuality+;
}
else
{
document.writeln(<param name=quality value=High />);
embedTxt += quality=High;
}
if (strBkColor)
{
document.writeln(<param name=bgcolor value=+strBkColor+ />);
embedTxt += bgcolor=+strBkColor+;
}
embedTxt += type=application/x-shockwave-flash pluginspage=http://www.macromedia.com/go/getflashplayer swLiveConnect=true ></embed>;
document.writeln(embedTxt);
document.writeln(</object>);
}
最后提醒的是,如果IE将“禁用脚本调试”的选项勾去掉了,那么还是不会起作用,但普通用户不太可能会去调试脚本的,所以也无所谓,而且M$也承诺在后续的更新中解决此问题:
Microsoft is investigating this problem and plans to fix it in a future cumulative update.
好了,继续作PRP去了……