【发布时间】:2011-06-15 01:49:08
【问题描述】:
我有一些 JScript 代码(从一些旧的 VBScript 转换而来),开头是这样的:
var Word = new ActiveXObject("Word.Basic");
Word.FileNew(); // opens new Word document
Word.Insert(IncorrectText);
Word.ToolsSpelling(); // opens spell check behind IE
这个想法是在浏览器中使用 MS Word 拼写检查,它在 XP 中运行良好,但拼写检查框在 Windows 7 / IE 8 的后台打开(this question 告诉我问题开始于Vista,可能是操作系统问题,而不是浏览器或 Office 问题)。
所以我的问题是,我怎样才能把这个窗口带到前台?一个重要的注意事项是最后一行 Word.ToolsSpelling(); 锁定了我的脚本,所以我所做的任何事情都需要在那之前。
我试过了
var wshShell = new ActiveXObject("WScript.Shell");
wshShell.AppActivate("Document1 - Microsoft Word"); // or some other text
在 ToolsSpelling 调用之前,但这并没有做任何事情(可能是因为此时 Word 文档实际上并未显示?)。当然,这只有在没有打开“Document1”时才有效,所以这是一个值得怀疑的想法。
根据this answer,我尝试使用window.blur(); 来模糊IE,但这只有在IE 窗口是唯一打开的窗口时才有效。也许有某种方法可以让我遍历所有打开的窗口并应用它?
SetForegroundWindow 看起来很有希望,但我不知道如何在 JSript 中使用它。
有什么想法吗?
注意:此站点的浏览器权限将完全开放。
更新:事实证明,如果您使用Word.Application,拼写检查应该会出现在前面。只有Word.Basic方法有这个问题(我没想到知道永恒这边的原因):
var wordApp = new ActiveXObject("Word.Application");
wordApp.Documents.Add();
wordDoc = wordApp.ActiveDocument;
... // safety checks before insertion
wordSelection.TypeText(IncorrectText);
wordDoc.CheckSpelling();
wordApp.Visible = false; // CheckSpelling makes the document visible
【问题讨论】:
标签: javascript ms-word activex office-interop