2016-06-17 1 views
0

나는 여기에 새롭고 Javascript와 JXA가 새롭다. 그래서 나는 어리석은 질문을하면 나를 용서해 준다. 하지만 JXA - JavaScript for Automation을 사용하여 강조 표시된 텍스트에서 문자열을 가져 오는 방법을 알아 내려고합니다. Javascript는 Yosemite 이후 Automator에서 인식 할 수 있으므로 다음과 같이 작업 할 수 있다고 생각했습니다. 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; 
} 

이 코드는 내 것이 아니며 누군가 게시했습니다. 하지만 나는 window 또는 document을 Automator에서 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를 참조하십시오.) 필자는 스크립트에서 스크립트를 작성하는 데 도움이되는 자세한 주석을 제공했습니다. 나는 또한 2 개의 참고 문헌을 제공했다 - 당신은 그것을 읽었 느냐? 나는 그 밖의 무엇을 추가해야할지 모른다. 특정 질문을하고 싶으면 대답하려고 노력할 것입니다. – JMichaelTX

+0

미안하지만, 투표를하려고했지만 적어도 15 가지의 평판이 필요하다고 말했습니다. 확인 표시가 그런 식으로 작동하는지 몰랐습니다. Yah 나는 그것을 봤고 특정 종류의 코드가 구체적으로 무엇을 가지고 있어요. 많은 감사합니다. –

0

웹 브라우저에 내장 된 JavaScript에만 적용됩니다. JXA는 웹 페이지 나 DOM에 대한 이해가 전혀없는 독립형 JS 인터프리터입니다 (그리고 솔직히 Mac 응용 프로그램 스크립팅에 대한 단서도 없습니다.).

대신 서비스가 거의 모든 OS X 응용 프로그램에서 선택된 텍스트를 조작 할 수 있으므로 Automator를 사용하여 OS X Service을 만듭니다. 응용 프로그램 스크립팅이 필요하지 않습니다.

+0

, 나는에 관리 하나를 만드십시오. 하지만 Javascript를 사용하여 다시해야한다고 들었습니다. 그게 바로 상황이 복잡 해지는 이유입니다. 어쨌든, 당신의 대답에 감사드립니다. –

+0

누가 JavaScript로 다시 하시겠습니까? 그들은 심지어 그들이 말하는 것에 대해 알고 있습니까? Mac 자동화가 작동하는 방식이 아니기 때문에 원본 게시물에서 DOM 기반 JavaScript를 사용하여 응용 프로그램에서 선택한 텍스트를 가져올 방법이 없습니다. 당신이 얻을 수있는 가장 가까운 것은 JmichaelTX의 게시물에서 Cmd-C 키 스트로크를 보내기 위해 GUI 스크립팅을 사용하는 것입니다. 그러나 GUI 스크립팅은 희박하고 신뢰할 수 없으며 절대적인 최후의 수단입니다. 확실히 다른 사람들이 사용하기를 원하는 코드 종류가 아닙니다. OS X Services는이를 수행하는 올바른 방법이며이를 작성하는 가장 쉬운 방법은 Automator에 있습니다. – foo

+0

즉 작업에 적합한 도구를 사용하십시오. 그렇지 않다면 말하면 누구나 바보입니다. '선택된 텍스트 조작'서비스가 스크립트 가능한 응용 프로그램이나 Unix 쉘과 상호 작용해야하는 경우 Automator에는 스크립트를 직접 실행하기위한'Run AppleScript' 및'Run Shell Script' 작업이 포함됩니다.[여기에 다른 서비스 자습서가 있습니다.] (http://arstechnica.com/apple/2011/03/howto-build-mac-os-x-services-with-automator-and-shell-scripting/)이 작업을 수행하는 방법을 보여줍니다. . – foo

0

당신은

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

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

스크립트는 JXA에 ... JXA 및 Safari의 JavaScript를 혼합 할 필요가 있지만, document.getSelection(). toString() 사파리에서 JavaScript입니다. 다른 응용 프로그램에서 선택한 텍스트를 원하는 경우

사파리 애플 이벤트를 활성화해야합니다 물론

... http://osxdaily.com/2011/11/03/enable-the-develop-menu-in-safari/

코드는 매우 다를 수 있습니다.

+0

그래 다른 응용 프로그램에서도 텍스트를 가져오고 싶습니다 ... 그러나 이것은 정말 좋은 참고 자료입니다. 고맙습니다! –

관련 문제