
[英]Does ActiveXObject('Word.Application') work in all browsers?
[英]New ActiveXObject('Word.Application') creates new winword.exe process when IE security does not allow object to be created
我们使用 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 安全性设置正确,它就可以正常工作,并且可以很好地满足我们的目的。 (我们最终可能会考虑拼写检查功能的其他选项,但它快速、便宜,并且可以完成我们需要它做的一切。)
最后一个问题困扰着我,我想对此做点什么,但我没有想法,而且我还有其他更需要我注意的事情。
在我把它放在一边之前,我想我会在这里征求建议。
我还没有找到这个问题的答案,我对这个问题暗示Internet Explorer的安全性感到不安(我忘了在我之前的帖子中提到我使用的版本:IE 7.)
但是,我确实实施了一个我不满意的解决方法,但是感觉比没有检查更舒服......
代码现在首先尝试打开另一个对象,如果失败,代码会假定Word也不会打开并发出错误。 从此时起,将不再调用新的ActiveXObject(),并且任何拼写检查尝试都将导致错误。
try {
oMSInfo = new ActiveXObject('Msinfo32.MSInfo.1');
} catch (error) {
// error handling code not shown...
return;
}
当对新ActiveXObject()的调用失败时,此对象不会启动新进程。 它对系统资源也没有明显的影响。
如果您的浏览器创建了一个对象的实例,则该对象本身不会被浏览器安全策略阻止,除非它是一个安全漏洞。
尝试“application.visible=true”或“application.show()”以找出应用程序要求用户交互的位置。
提示:'typeof application=="undefined"' 表示变量'application' 未定义,其中'typeof application=="unknown"' 或多或少意味着它是一个已定义的变量,填充了外部专有的变量对象,如果您真的需要知道如何处理它,请阅读手册 - 在提到的应用程序的任何打开窗口中按 [F11] 在这种情况下可能会有所帮助。
可能是一个有用的资源: https : //docs.microsoft.com/en-us/office/vba/api/Word.Application
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.