
GoogleのWebブラウザ「Google Chrome for Mac」の最新バージョン、7.0.517.41でGoogle Chromium 6.xとほぼ同じレベルのAppleScript対応機能が搭載されました。オープンソース版のChromiumの方が先行してAppleScript強化が行われ、Chromeがそれに追いついた格好です。
Google Chromeは勝手に(サイレントで)オンラインアップデートされるため、このバージョン番号はあくまでも私が確認したものであり、人によって(日によって)異なる可能性があります。
ChromeのAppleScript対応度がChromiumに追いついた……といっても、詳細を調べてみるとまったく同じというわけではありません。
ChromiumとChromeのAppleScript用語辞書をHTMLに書き出して差分(diff)をとってみると、
Chromium: paste
Chrome: paste selection
と、paste命令が「paste selection」に変わったことと、ChromiumにはなかったJavascript実行用の「execute」コマンドが搭載されたことが分かりました。
Chromeの「execute」コマンドは、Safariで搭載されている「do JavaScript」コマンドと同じ働きをすることを目指したものと予想されます。これがまともに動作するのであれば、AppleScriptだけではページのローディング完了を厳密に取得できないApple純正のSafariよりも、ChromeのAppleScript対応度が上回ることになります。
さっそく、AppleScriptを書いて試してみましょう。SafariでJavaScript経由でオープン中のページのタイトルを取得するのは、こんな感じです。
| スクリプト名:Safariでドキュメントのタイトルを取得 |
tell application “Safari” do JavaScript “document.title” in document 1 end tell –> “Google” |
|
▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に
|
一方、Google Chromeはdocumentオブジェクトが存在せず、windowオブジェクトでしか指定できず……さらに、tabを明確に指定しないとエラーになります。いろいろ試してみましたが……
| スクリプト名:Chromeでドキュメントのタイトルを取得 |
tell application “Google Chrome” tell window 1 tell tab 1 execute javascript “document.title” end tell end tell end tell
|
|
▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に
|
このようなオブジェクト階層に向けてexecute javascriptコマンドを実行するようですが、結果がつねにmissing valueです。
application “Google Chrome”とか、windowに対してexecuteコマンドを実行しても、エラーになるので、これで正しいオブジェクト階層を指定しているように見えるものの……有意な結果が返ってきません。missing valueが返ってくるだけです。
Google Chromeのexecuteコマンドは、まだ実装途中か……あるいは、まともにデバッグせずに公開してしまったもののようです。私は(現時点では)「使えない命令」だと判断しました。