2016-06-17 28 views
0

Ich bin das Abendessen hier neu, entweder Javascript und JXA, so entschuldigen Sie mich, wenn ich ein paar dumme Fragen stellen. Aber ich versuche, einen Weg zu finden, die Zeichenfolge aus dem markierten Text mit JXA - JavaScript for Automation, für Javascript kann in Automator seit Yosemite erkannt werden, ich dachte, ich kann etwas mit diesen arbeiten: window.getSelection in:Holen Sie sich die Zeichenfolge von ausgewählten Text/markierten Text mit 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; 
} 

Dieser Code gehört nicht mir, jemand hat dies gepostet. Aber ich habe herausgefunden, dass ich window oder document hier in Automator nicht verwenden kann, um auf Mac OS zu ändern, kann mir also jemand zeigen, wie man diesen Javascript-Code in JXA konvertiert, was Automator verstehen kann?

Vielen Dank!

Antwort

0

Im Allgemeinen können Sie die App System Events zum Kopieren und Einfügen mit einer beliebigen App verwenden.

'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) 
 
}

Für weitere Informationen siehe:

+0

Danke für! Aber es scheint, dass dies ein bisschen High-Level für mich zu verstehen ist. Ich habe es in Automator gemacht, aber ich möchte wirklich wissen, was in deinen Codes vor sich geht, kannst du bitte eine weitere Erklärung dazu geben? Vielen Dank! –

+0

Schön, dass es für dich funktioniert hat. Wenn dies Ihre Frage beantwortet, überprüfen Sie sie bitte als "akzeptierte Antwort". (Siehe http://stackoverflow.com/help/accepted-answer) Ich habe detaillierte Kommentare in meinem Skript zur Verfügung gestellt, die Sie leiten sollten. Ich habe auch zwei Referenzen genannt - hast du sie gelesen? Ich weiß nicht, was ich noch hinzufügen soll. Wenn Sie eine bestimmte Frage stellen möchten, werde ich versuchen zu antworten. – JMichaelTX

+0

Entschuldigung, ich habe versucht zu wählen, aber es heißt, ich brauche mindestens 15 Ruf, um das zu tun. Wusste nicht, dass das Häkchen so funktioniert. Yah, ich habe es gegoogelt und irgendwie verstanden, was die Codes konkret machen. Danke vielmals. –

0

Tun Sie das nicht, es gilt nur für JavaScript, das in einen Webbrowser eingebettet ist. JXA ist ein eigenständiger JS-Interpreter, der absolut kein Verständnis für Webseiten oder DOM hat (und ehrlich gesagt auch nicht viel Ahnung von Mac-Anwendungsscripten, übrigens).

Verwenden Sie stattdessen Automator, um OS X Service zu erstellen, da Dienste ausgewählten Text in fast jeder OS X-App manipulieren können; Es ist kein Anwendungsskript erforderlich.

+0

Es ist wahr, dass es mit Automator Workflow machen, ist viel weniger Aufwand, ich es geschafft, erstelle einen. Aber mir wurde gesagt, dass ich es wieder mit Javascript machen soll, deshalb sind die Dinge so kompliziert geworden. Wie auch immer, danke für deine Antwort. –

+0

Wer hat dir gesagt, dass du es in JavaScript nochmal machen sollst? Wissen sie überhaupt wovon sie reden? Es gibt keine Möglichkeit, ausgewählten Text aus Anwendungen zu erhalten, die das DOM-basierte JavaScript in Ihrem ursprünglichen Post verwenden, da die Mac-Automatisierung nicht so funktioniert. Am nächsten kommt man mit GUI Scripting wie in JMichaelTX's Post, um Cmd-C Tastenanschläge zu senden, aber GUI Scripting ist ein abscheulicher Hack: flockig, unzuverlässig und ein absolutes letztes Mittel; definitiv nicht die Art von Code, den Sie für andere schreiben möchten. OS X-Dienste sind der richtige Weg, und der einfachste Weg, dies zu tun, ist in Automator. – foo

+0

, d.h. Verwenden Sie das richtige Werkzeug für den Job. Wer etwas anderes sagt, ist ein Idiot. Wenn Ihr Dienst "Ausgewählten Text manipulieren" mit skriptfähigen Anwendungen oder der Unix-Shell interagieren muss, enthält Automator die Aktionen "AppleScript ausführen" und "Shell-Skript ausführen", um Skripts direkt auszuführen.[Hier ist ein weiteres Service-Tutorial] (http://arstechnica.com/apple/2011/03/howto-build-mac-os-x-services-with-automator-and-shell-scripting/), das zeigt, wie das geht . – foo

0

Sie benötigen JXA und 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 
}) 

Das Skript ist in JXA, aber die document.getSelection(). ToString() ist Safari javaScript zu mischen.

Natürlich benötigen Sie Apple Event in Safari ... http://osxdaily.com/2011/11/03/enable-the-develop-menu-in-safari/

Wenn Sie den ausgewählten Text aus einer anderen Anwendung mögen, der Code kann sehr unterschiedlich sein können.

+0

Ja ich möchte den Text auch von anderen Anwendungen bekommen ... Aber das sind wirklich gute Referenzen. Vielen Dank! –