当IE安全性不允许创建对象时,新的ActiveXObject('Word.Application')会创建新的winword.exe进程

时间:2010-03-11 18:17:54

标签: javascript ms-word activexobject browser-security

我们使用MS Word作为私人公司网站上几个字段的拼写检查程序,当IE安全设置正确时,它运行良好。 (站点的区域设置为“可信”,并且可信区域已修改为允许控件在不提示的情况下运行。)

我们正在使用的脚本创建一个单词对象,然后将其关闭。当对象存在时,会运行winword.exe进程,但在关闭Word对象时会将其销毁。

如果我们的站点未设置在受信任区域(具有默认安全级别的Internet区域),则创建Word对象的调用将按预期失败,但仍会创建winword.exe进程。我没有任何方法可以在脚本中与此进程进行交互,因此进程会一直存在,直到用户注销(用户无法手动销毁进程,即使他们这样做也不是一个好的解决方案)。 )

尝试创建对象的调用是......

try {
      wordApplication = new ActiveXObject('Word.Application');
} catch(error) {
      // irrelevant code removed, described in comments..
      // notify user spell check cannot be used
      // disable spell check option
}

因此,每次加载页面时,可能会再次运行此代码,从而创建另一个孤立的winword.exe进程。

当然,

wordApplication在catch块中是未定义的。

我希望能够事先检测浏览器安全设置,但我已经对此进行了一些搜索,并且认为不可能。

这里的管理层对它很满意。只要IE安全设置正确,它就可以工作,并且它适用于我们的目的。 (我们最终可能会考虑拼写检查功能的其他选项,但这很快,很便宜,而且我们需要做的一切。)

这最后一个问题让我感到困惑,我想对此做点什么,但我没有想法,而且还有其他更需要我注意的事情。

在我把它放在一边之前,我想我会在这里寻求建议。

1 个答案:

答案 0 :(得分:1)

我还没有找到这个问题的答案,我对这个问题暗示Internet Explorer的安全性感到不安(我忘了在我之前的帖子中提到我使用的版本:IE 7。)

然而,我确实实施了一个我不满意的解决方法,但是感觉比不检查更舒服......

代码现在首先尝试打开另一个对象,如果失败,代码会假定Word也不会打开并发出错误。从现在开始,不再需要调用新的ActiveXObject(),任何拼写检查尝试都会导致错误。

try { 
    oMSInfo = new ActiveXObject('Msinfo32.MSInfo.1');
} catch (error) {
    //  error handling code not shown...
    return;
}

当对新ActiveXObject()的调用失败时,此对象不会启动新进程。它对系统资源也没有明显的影响。