SafariとChromeの操作方法の違いは以下を参照
JXAでSafari, Chrome, Firefoxを操作する際の違い
サンプル
ブラウザのダイアログに「hello.」と表示して「goodbye.」という文字列を得る
最後に評価された式の結果が戻り値になる
Safariの場合
SCRIPT = "alert('hello.'); 'goodbye.'"
app = Application("Safari")
tab = app.windows[0].tabs[0]
app.doJavaScript(SCRIPT, {in: tab}) // "goodbye."
Chromeの場合
SCRIPT = "alert('hello.'); 'goodbye.'"
app = Application("Chrome")
tab = app.windows[0].tabs[0]
tab.execute({javascript: SCRIPT}) // "goodbye."
// app.execute(tab, {javascript: SCRIPT})を省略した書き方
エラー出た場合はnullが返る
で、文字列で渡さなきゃいけないから複雑なスクリプトを実行したいときに不便
エディタのシンタックスハイライトも補完も効かない
複数行書くのもエスケープもめんどい
そんな時は普通に関数として書いて.toString()
し、即時実行させればいい
chrome_sample.js
func = function(){
var message = "ぃぇぁ";
alert(message);
return message;
}
func_str = "(" + func.toString() + ")()"
app = Application("Chrome")
tab = app.windows[0].tabs[0]
tab.execute({javascript: func_str})
おまけ
ヒアドキュメントっぽいやつ
here_document.js
var text = (function(){/*
あああ
いいい
ううう
*/}).toString().split(/\r?\n/).slice(1, -1).join("\n")