edama2さんからの投稿です。Markdown書類をプレビューするAppleScriptです。
本Scriptには、画期的な技術が用いられています。普通、AppleScriptObjCでは、WkWebViewによるネットワークアクセスを行うと、ネットワークアクセスを行う子プロセスと、WkWebViewで表示を行う子プロセスが生じて、処理が終了しても残ってしまいます。
スクリプトエディタ上で実行した場合には、スクリプトエディタを終了すればこうした子プロセスはメモリ上からパージされますが、終了するまで子プロセスは残されたままです。
「まー、AppleScriptObjCだから仕方ないよねー」
などと去年の年末に秋葉原でカレーを食べながらバカ話をしていた記憶がありますが、edama2さんがついにこれを回避する記法を編み出してしまったわけです。
回避方法については、やり方を説明されると「なるほど」という単純明快なものです(それを思いつくのがすごい)。osascript経由でAppleScriptを再実行することで、ランタイム環境を明示的にosascriptに指定してプログラムを実行。osascriptの終了とともにメモリ上から子プロセスがパージされるということのようです。
ランタイム環境を動的に生成し、実行後にランタイム環境がメモリ上から消去されるようになっていれば、子プロセス(ゴミ)が残っていてもまとめて消える………AppleScriptのランタイム環境はosascriptのほかCocoa系もあるので、そちらでも試してみるとよいでしょう。
ほかにも、WkWebViewによる表示を行う専用の支援アプリケーションを作っておき、AppleScript用語辞書経由で表示を行わせるという解決策も考えられます(ためしていないですが)。
| AppleScript名:アラートダイアログでMarkdownをプレビュー v3a |
| use AppleScript use framework “AppKit” use framework “Foundation” use framework “WebKit” use scripting additions on run args if (args’s class) is script then set myPath to (path to me)’s POSIX path set resultText to do shell script “osascript “ & myPath’s quoted form else my main() end if end run
## 後始末 theView’s stopLoading() set js to “window.open(’about:blank’,’_self’).close();” theView’s evaluateJavaScript:js completionHandler:(missing value) set theView to missing value end displayMarkdownPreview: |
| ★Click Here to Open This Script |

























