2016-06-17 57 views
0

我在這裏吃晚飯,Javascript或JXA,所以如果我提出一些愚蠢的問題,請原諒我。但我試圖找出一種方法,使用JXA - JavaScript for Automation從高亮顯示的文本中獲取字符串,因爲自從Yosemite可以在Automator中識別Javascript,我想我可以使用這些工具: window.getSelection使用JXA從選定的文本/突出顯示的文本中獲取字符串

function getSelectedText() { 
    if (window.getSelection) { 
     txt = window.getSelection(); 
    } else if (window.document.getSelection) { 
     txt =window.document.getSelection(); 
    } else if (window.document.selection) { 
     txt = window.document.selection.createRange().text; 
    } 
    return txt; 
} 

此代碼不是我的,有人發佈了這個。但我發現在Automator中我不能使用windowdocument來更改Mac OS,那麼有人可以告訴我如何將此JavaScript代碼轉換爲Automator可以理解的JXA?

非常感謝!

回答

0

通常,您可以使用系統事件應用程序來複制和粘貼任何應用程序。

'use strict'; 
 

 
//--- GET A REF TO CURRENT APP WITH STD ADDITONS --- 
 
var app = Application.currentApplication() 
 
app.includeStandardAdditions = true 
 

 
var seApp = Application('System Events') 
 

 
//--- Set the Clipboard so we can test for no selection --- 
 
app.setTheClipboardTo("[NONE]") 
 

 
//--- Activate the App to COPY the Selection --- 
 
var safariApp = Application("Safari") 
 
safariApp.activate() 
 
delay(0.2) \t // adjust the delay as needed 
 

 
//--- Issue the COPY Command --- 
 
seApp.keystroke('c', { using: 'command down' }) // Press ⌘C 
 
delay(0.2) \t // adjust the delay as needed 
 

 
//--- Get the Text on the Clipboard --- 
 
var clipStr = app.theClipboard() 
 
console.log(clipStr) 
 

 
//--- Display Alert if NO Selection was Made --- 
 
if (clipStr === "[NONE]") { 
 
\t var msgStr = "NO Selection was made" 
 
\t console.log(msgStr) 
 
\t app.activate() 
 
\t app.displayAlert(msgStr) 
 
}

欲瞭解更多信息,請參閱:

+0

謝謝!但是,這似乎有點讓我理解。我使用Automator工作,但我想真正知道代碼中發生了什麼,請給出關於它的進一步解釋?謝謝一堆! –

+0

很高興爲你效勞。如果這回答你的問題,請檢查它作爲「接受的答案」。 (請參閱http://stackoverflow.com/help/accepted-answer)我在腳本中提供了詳細的評論,可以指導您。我還提供了兩個參考文獻 - 你讀過它們了嗎?我不知道還有什麼要補充的。如果你想問一個具體的問題,我會試着回答。 – JMichaelTX

+0

對不起,我正在嘗試投票,但它說我至少需要15個聲望才能這樣做。不知道檢查標記是這樣工作的。是的,我把它搜出來了,並且得到了具體的代碼。非常感謝。 –

0

不要這樣做,它只適用於嵌入在Web瀏覽器中的JavaScript。 JXA是一個獨立的JS解釋器,它完全不瞭解網頁或DOM(並且坦率地說,對Mac應用程序腳本也沒有多少線索)。

取而代之,使用Automator創建一個OS X Service,因爲服務可以在幾乎任何OS X應用程序中操作選定的文本;不需要應用程序腳本。

+0

這是真的,使用Automator工作流使得它少得多的努力,我成功創建一個。但我被告知再次使用Javascript來做,所以事情變得這麼複雜。無論如何,謝謝你的回答。 –

+0

誰讓你在JavaScript中再次使用它?他們甚至知道他們在說什麼嗎?沒有辦法從原始文章中使用基於DOM的JavaScript獲取應用程序中的選定文本,因爲這不是Mac自動化的工作方式。您可以得到的最接近的結果是使用GUI腳本,就像在JMichaelTX的帖子中發送Cmd-C鍵擊一樣,但是GUI腳本是一種可惡的破解:片狀,不可靠,絕對不得已而爲之;絕對不是您希望爲其他人使用而編寫的代碼。 OS X Services是實現它的正確方法,編寫它們的最簡單方法是使用Automator。 – foo

+0

即使用正確的工具進行工作。任何說不然的人都是白癡。如果您的「操作選定文本」服務需要與可編寫腳本的應用程序或Unix shell進行交互,Automator將包含「運行AppleScript」和「運行Shell腳本」操作,以便直接運行腳本。[這是另一個服務教程](http://arstechnica.com/apple/2011/03/howto-build-mac-os-x-services-with-automator-and-shell-scripting/),它顯示瞭如何做到這一點。 – foo

0

你需要混合JXA和Safari的JavaScript ...

var Safari = Application("Safari") // get Safari 

selection = Safari.doJavaScript("document.getSelection().toString()",{  
    in: Safari.windows[0].tabs[0] // assume frontmost window and tab 
}) 

腳本是JXA,但document.getSelection()。toString()方法是Safari瀏覽器的JavaScript。

當然,你需要在Safari中啓用蘋果公司發生的... http://osxdaily.com/2011/11/03/enable-the-develop-menu-in-safari/

如果你想從另一個應用程序選定的文本,該代碼可能會非常不同。

+0

是的,我也想從其他應用程序獲取文本...但這是非常好的參考。謝謝! –

相關問題