Archive for the 'JavaScript' Category

2014/12/20 JXAでAppleScriptを実行する

OS XのJavaScript for Automation(JXA)でAppleScriptを実行するJavaScriptです。

JavaScript名:JXAでAppleScriptを実行する
var app = Application.currentApplication()
app.includeStandardAdditions =
true
app.strictParameterType =
false
app.runScript(
’display dialog \"test\"’,{in:’AppleScript’})

★Click Here to Open This Script 

2014/12/19 AppleScriptでJavaScriptを実行する

AppleScriptからJavaScriptを実行する方法がUS AppleのAppleScript Users MLで議論されていたので、いろいろとテストしたうえでまとめてみました。

なお、本AppleScriptは明示的にメインスレッドで実行させるために、Script Editor上で通常の「Command-R」ではなく、「Control-Command-R」で実行する必要があります(この操作を行わないと、サブスレッド上で実行されている旨のエラーが出ます)。ASObjCExplorer 4上で実行する場合には、ウィンドウ左下にある「Run in foreground」のチェックボックスにチェックを入れてから実行します。

(1)run script xxxxx in “OSA-Language Name”

こんな方法で実行できたとは、、、。正直言って驚きました。これまで、OSに複数のOSA言語がインストールされてリリースされたことが(ほとんど)なかったので、他のOSA言語を呼び出すという場面がなかったわけですが、こういう呼び出し方で呼び出せるんですね。リリースノートに書かれているんだかいないんだか。この呼び出し方でJXA(JavaScript for Automation)のScriptをAppleScript側から実行できます。同様に、JXA側からAppleScriptを実行することも可能と思われます。

(2)WebViewを動的に生成してJavaScriptを実行

WebViewを動的に生成して操作する場合には、JavaScriptのコマンドを実行することになります。つまり、Webブラウザ上と同様にJavaScriptを実行できるわけですが、これはJXAではありません。このため、Webブラウザ上で実行できるJavaScriptはこの方法で呼び出せますが、JXAで書かれたScriptを実行することはできません。

(3)JavaScript CoreでJavaScriptを実行

WebKitでJS実行するのと速度差はありません。同様に、ここで実行できるJavaScriptはJXAではありません。

js_table1.png
▲OS X上で実行可能な(主な)JavaScript処理系

AppleScript名:ASでJavaScriptを実行する
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “JavaScriptCore”
use framework “WebKit”

–実行するJavaScriptのテキスト
set jsText to
var app = Application.currentApplication()
app.includeStandardAdditions = true
app.displayDialog(’How are you?’)

–run scriptでAppleScriptからJavaScriptを実行する(JXA:アプリケーション操作可能)
set k to run script jsText in “Javascript” –AppleScriptから一番手軽なJXA呼び出し
log {“1″}

–WebKitでJavaScriptを実行する(高速だが、アプリケーション操作不可)
set theWebView to current application’s WebView’s alloc()’s init()
set x to (theWebView’s stringByEvaluatingJavaScriptFromString:jsText) as text
log {“2″}

–JavaScript CoreでJavaScriptを実行する(高速だが、アプリケーション操作不可)
set theContext to current application’s JSContext’s alloc()’s init()
set theJSValue to theContext’s evaluateScript:jsText
log {“3″}

★Click Here to Open This Script 

2014/10/24 Script整形表示用AppleScriptをJavaScriptに対応

いつもBlogへの投稿に使っている、AppleScriptの整形投稿用のAppleScript(ASのソースを読み取って、HTML化してファイル出力)を、JavaScriptに対応させてみました。

とりあえず、Script Editorで表示させている最前面のウィンドウの書類がAppleScriptなのかJavaScriptなのかを検出して、色などを変更させてみました。

# 単にBlog掲載用のHTML書き出しプログラムをJavaScriptに対応させた(些細な修正)だけです

AppleScript名:asでdisplay dialog
use scripting additions
display dialog “こんにちは” with title “たいとるだよ” default answer “なんか入力して”

–> {button returned:”OK”, text returned:”なんか入力して”}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

JavaScript名:jsでdisplay dialog
anApp = Application.currentApplication();
anApp.includeStandardAdditions =
true;
anApp.displayDialog (
’こんにちは’,
  {
    withTitle: ’たいとるだよ’,
    defaultAnswer:
’なんか入力してね’
  }
);

//–> {“buttonReturned”:“OK”, “textReturned”:“なんか入力してね”}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

js1.png

プログラムリスト末尾のScriptリンクをクリックすると、自動でScript Editorに内容は転送されるものの、その言語がASかJSかの指定まではできないので(あってもよさそうなもんですが)、異なるOSA言語をデフォルトに設定している方は、

js2.png

OSA言語ポップアップからJSに変更してコンパイル(構文確認)を行ってください。