3

我们使用 MS Word 作为私人公司网站上一些字段的拼写检查器,当 IE 安全设​​置正确时,它运行良好。(站点的区域设置为“受信任”,并且已修改受信任区域以允许控制在没有提示的情况下运行。)

我们使用的脚本创建了一个 word 对象,然后将其关闭。当对象存在时,一个 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 安全设​​置正确,它就可以正常工作,并且可以很好地满足我们的目的。(我们最终可能会考虑拼写检查功能的其他选项,但这是快速、廉价的,并且可以完成我们需要做的所有事情。)

最后一个问题困扰着我,我想做点什么,但我没有想法,我还有其他更需要我注意的事情。

在我把它放在一边之前,我想我会在这里征求意见。

4

2 回答 2

1

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

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

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

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

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

于 2010-03-18T20:21:20.170 回答
0

如果您的浏览器创建了一个对象的实例,则该对象本身不会被浏览器安全策略阻止,除非它是安全漏洞。

尝试“application.visible=true”或“application.show()”来找出应用程序要求用户交互的位置。

提示:'typeof application=="undefined"' 表示变量 'application' 没有定义,其中 'typeof application=="unknown"' 或多或少意味着它是一个已定义的变量,填充了一个外部的、专有的对象,如果您真的需要知道如何处理它,请阅读手册——在上述应用程序的任何打开窗口中按 [F11] 可能会有所帮助。

可能是一个有用的资源:https ://docs.microsoft.com/en-us/office/vba/api/Word.Application

于 2021-11-30T17:15:59.043 回答