CSK.Blog--个人原创Weblog

« 视觉幻象做了些立体图 »

ActiveX不再Active了……

标题说的有点夸张了,其实是M$的KB912945对今后IE的一些修改

据说是和专利纠纷有关,M$打算在不久后发布一个新的IE补丁,同时也将被IE7采用。这个补丁十分的荒唐:

After you install this update, you cannot interact with ActiveX controls from certain Web pages until these controls are enabled. To enable an ActiveX control, manually click the control.

大意是:在安装好本次更新后,除非你事先手动将页面上的ActiveX控件激活,否则无法和他们交户

直白点就是比如网页上的一个Flash游戏,你先要去点击他一下,让IE把它激活,然后开能开始进行正常操作,下面是装了这个补丁的IE的画面:

如果不做修改,以后我Blog上的那个Flash鼠标移上去是这样的,然后你必须去点一下激活它,而且如果页面上有3个Flash或者是MeidaPlayer控件或者是Java程序,那么每个都需要你去手动激活……

真不明白这样有什么好处……幸好只是阻断了与用户的交互,相当于调用了EnableWindow(hActiveXWin,flase);这样的API,插件的非交互性操作都是正常的,但每次要去点一下总是很不爽的。这个补丁在2个月内就会公开发表,所以还是早做准备为好

在MSDN上有一篇教开发人员如何应对此改动的文章,地址是:

http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/overview/activating_activex.asp

里面最有价值的就是可以用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$也承诺在后续的更新中解决此问题:

External script technique does not work when the Disable Script Debugging (Internet Explorer) check box is cleared Microsoft is investigating this problem and plans to fix it in a future cumulative update.

好了,继续作PRP去了……

  • quote 2.heaven
  • 呵呵,的确这样,不过后来习惯了就好多了。而且有时候为了保证代码的风格……
  • 4/8/2006 4:20:09 PM 回复该留言
  • quote 4.TiGERTiAN
  • 大小写是应该切换的,既保持一种代码风格,也易于维护。
  • 4/13/2006 4:41:07 PM 回复该留言

发表评论:

注意:为了有效防止SPAM,任何含有http://字样的消息会被阻止发布同时,本站仅供技术交流,请不要讨论任何政治敏感话题或者低级趣味问题。

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Copyright Shikai Chen 2000-2012. Powered By Z-Blog(CSK Modified)