Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

AppleScript上でJavaScriptを実行する

Posted on 11月 3, 2018 by Takaaki Naganoya

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処理系 JXA(JavaScript for Automation) JSX(with Adobe CC) JavaScript on WebView JavaScript Core
GUIアプリケーション操作 OK Adobeアプリケーションのみ NG NG
実行環境 スクリプトエディタ、アプレット、スクリプトメニューなど ExtendScript Toolkit WebView メモリ上でオブジェクトをロードして実行
備考 macOS 10.10で標準装備されたOSA版のJS Adobe CS/CCを操作するためのJS Webブラウザ上で動作させるJS WebkitのJavaScript実行エンジン

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

実際に、数値演算ライブラリをJavaScriptで書いて(JXA)AppleScriptから呼び出したときに、頻繁にクラッシュを経験しているため、JXAでライブラリを書くのはリスキーだと感じています。

結局、AppleScriptからJavaScript Coreを呼び出す方法に落ち着き、クラッシュも激減。スピードもJXA呼び出しより30倍ぐらい高速になりました。

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 

また、「Safariのdo JavaScriptから結果をJSONで返してASの各種オブジェクトに変換」の記事において、AppleScriptからJavaScriptを呼び出して、さまざまな型のデータをJavaScript側から受け取る方法についても紹介しています。

More from my site

  • Safariのdo JavaScriptから結果をJSONで返してASの各種オブジェクトに変換Safariのdo JavaScriptから結果をJSONで返してASの各種オブジェクトに変換
  • JavaScriptCore経由で関数計算を行うcalcLibASをアップデートJavaScriptCore経由で関数計算を行うcalcLibASをアップデート
  • 2019年に書いた価値あるAppleScript2019年に書いた価値あるAppleScript
  • アラートダイアログ上のWebViewに世界地図を表示 v2bアラートダイアログ上のWebViewに世界地図を表示 v2b
  • Safariで現在見えている表を抽出してCSV書き出しv3Safariで現在見えている表を抽出してCSV書き出しv3
  • Safariで現在見えている表を抽出してCSV書き出しSafariで現在見えている表を抽出してCSV書き出し
Posted in JavaScript JXA | Leave a comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular Posts

  • Keynoteの最前面のドキュメントの現在のスライドに指定月の日曜日はじまりカレンダーを表で作成
  • Numbersで選択範囲のセルのデータを取得して重複データを抽出
  • 配列の指定要素を検索する(テキスト)
  • 文字列のURLエンコード、URLデコード
  • 指定フォルダに指定アイコン画像をつける v3
  • リストから選択してアイテム番号を返す
  • AppleScript上でJavaScriptを実行する
  • ディスプレイの設定切り替えをAppleScriptでも行えるSwitchResX
  • Xcode 12.2betaでIntel/ARM Universal Binaryのビルドを確認
  • AppleScriptでキースキャン
  • Numbersで選択中の表のセルの範囲を背景色で頻度集計
  • SafariでURLをローディング
  • CotEditorで編集中のMarkdown書類をPDFプレビュー
  • AppleScript disassembler
  • Safariで表示中のWebページの最終更新日時を取得
  • 【基礎】AppleScriptの実行を(操作により)中断する
  • 各種GUI要素なしでSafari上に新規ウィンドウ表示
  • NSProcessInfoでプロセスの各種情報を取得
  • Safariで表示中のURLをwebarchive保存
  • Bluetoothデバイスのバッテリー残量を取得 v3

Tags

10.11savvy (1109) 10.12savvy (1249) 10.13savvy (1384) 10.14savvy (504) 10.15savvy (295) 11.0savvy (103) CotEditor (47) Finder (43) iTunes (25) Keynote (58) NSAlert (59) NSAlertSecondButtonReturn (16) NSArray (50) NSBitmapImageRep (20) NSBundle (19) NSButton (33) NSColor (48) NSDictionary (26) NSFileManager (23) NSFont (18) NSImage (40) NSJSONSerialization (20) NSMutableArray (61) NSMutableDictionary (21) NSPredicate (36) NSRunningApplication (55) NSScreen (30) NSScrollView (22) NSString (113) NSURL (93) NSURLRequest (22) NSUTF8StringEncoding (29) NSUUID (18) NSView (33) NSWindow (17) NSWorkspace (19) Numbers (42) Pages (16) Safari (34) System Events (16) WKUserContentController (20) WKUserScript (19) WKUserScriptInjectionTimeAtDocumentEnd (17) WKWebView (21) WKWebViewConfiguration (21)

カテゴリー

  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Bluetooth
  • boolean
  • Bug
  • Calendar
  • call by reference
  • Clipboard
  • Code Sign
  • Color
  • Custom Class
  • dialog
  • drive
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • History
  • How To
  • Icon
  • Image
  • Input Method
  • Internet
  • JavaScript
  • JXA
  • Keychain
  • Language
  • list
  • Locale
  • Machine Learning
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Noification
  • Notarization
  • Number
  • OCR
  • OSA
  • PDF
  • Peripheral
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • sdef
  • search
  • Security
  • shell script
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • 登録
  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC