2016-06-17 15 views
0

ここではJavascriptとJXAのどちらか新しい方が好きなので愚かな質問をしたら私を許してください。しかし、私はJXAを使用してハイライトされたテキストから文字列を取得しようとしています - JavaScript for Automationは、Yosemite以来AutomatorでJavascriptが認識できるので、私はこれらと何かできることを考えました: window.getSelection in: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の評判が必要だと言いました。チェックマークがそのように機能するかどうかはわかりませんでした。私はそれを見つけ出して、特定のコードが何をしているのかを知っています。どうもありがとう。 –

0

ウェブブラウザに埋め込まれたJavaScriptにのみ適用されます。 JXAはスタンドアロンのJSインタプリタであり、WebページやDOMを全く理解していません(そして、Macのアプリケーションスクリプトについても、率直に言えば、btw)。

代わりに、ほとんどすべてのOS Xアプリケーションでサービスが選択されたテキストを操作できるように、Automatorを使用してOS X Serviceを作成します。アプリケーションのスクリプト作成は不要です。

+0

これは、Automatorのワークフローでそれを作ることは非常に少ない労力であることは事実だが、私はに管理一つ作る。しかし、私はJavascriptを使ってもう一度やるように言われました。とにかく、あなたの答えをありがとう。 –

+0

JavaScriptでもう一度やりたかったのは誰ですか?彼らは彼らが何を話しているのかを知っていますか? Macの自動化の仕組みではないため、元の投稿でDOMベースのJavaScriptを使用してアプリケーションから選択したテキストを取得する方法はありません。あなたが得ることができる最も近いのは、Cmd-Cキーストロークを送信するJMichaelTXの投稿のようにGUI Scriptingを使用することですが、GUIスクリプティングは不安定で、信頼性が低く、絶対的な最後の手段です。間違いなく、他人が使用するために書いておきたいコードの種類ではありません。 OS Xサービスはこれを行う正しい方法であり、それらを書き込む最も簡単な方法はAutomatorにあります。 – foo

+0

つまり、ジョブには適切なツールを使用します。そうでないと言う人は誰でも馬鹿です。 'Manifulate Selected Text'サービスがスクリプト可能なアプリケーションや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

スクリプトがJXAであるが、document.getSelection(

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

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

... JXAとSafariのJavaScriptを混在させる必要があります)。のtoString()SafariのJavaScriptのです。

あなたはSafariでAppleイベントを有効にする必要があります。もちろん、

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

あなたが他のアプリケーションから選択したテキストをしたい場合は、コードは非常に異なる可能性があります。

+0

そうですね、他のアプリケーションからもテキストを取得したいのですが...これは本当に参考になります。ありがとうございました! –

関連する問題