2011-06-03 24 views
2

我有開始一些像這樣的JScript代碼(由一些舊的VBScript轉換):帶拼寫檢查窗口,在Windows中使用JavaScript/JScript中到前臺7

var Word = new ActiveXObject("Word.Basic"); 

Word.FileNew(); // opens new Word document 
Word.Insert(IncorrectText); 
Word.ToolsSpelling(); // opens spell check behind IE 

的想法是利用微軟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 

回答

2

您可能能夠卷染窗口狀態。當窗口最小化後窗口最大化時,Windows將在前面堆疊(zIndex到頂部)。

喜歡的東西:

var WIN_MAX = 2; 
var WIN_MIN = 1; 

var Word = new ActiveXObject("Word.Application"); 
Word.Visible = true; 
// minimize the app 
Word.WindowState = WIN_MIN ; 
// in 500ms, maximize 
setTimeout(function() { 
    Word.WindowState = WIN_MAX; 
}, 500); 

setTimeout電話尋求解決一個時機的問題;當編程最小化/最大化直接發生時,Windows有時會「困惑」。您可能需要稍微延長這一延遲時間,反覆測試並查看您得到了什麼樣的結果。

+0

我得到一個「對象不支持這個屬性或方法」錯誤'Word.Visible = true;'。與'Word.WindowState = WIN_MIN'一樣。也許這些函數不適用於Word.Basic? – jtpereyda 2011-06-09 18:22:44

+0

你可以嘗試'Word.Application'作爲ActiveXObject嗎?讓我知道。 – 2011-06-09 18:24:01

+0

'var Word = new ActiveXObject(「Word.Application」);'確實有用,但它使其他調用無效。我認爲'Word.FileNew()'的替換是'Word.Documents.Add()',但是我在選擇時遇到了問題。如果你或者某個人已經知道如何使用這個API,那會很有幫助。否則,我會在週末之後拿起它。 – jtpereyda 2011-06-09 23:43:21