Safariで指定URLのページローディングを検出するAppleScriptです。
Safari 13で従来どおり、do javascriptコマンド経由で、
if (do JavaScript "document.readyState" in document 1) is "complete" then
などと処理させてみたら、URLが変更される前に”complete”が返ってきました。どうも、この処理が非同期実行されるのか、表示が反映される前に内部的にはページ遷移が完了しているようです。
現行のSafariにおいては、上記の処理ではページローディング完了検出が行えないことが判明。割と利用する機会が多く、重要な処理であるため、書き換えてみました。
いろいろ実験してみると、documentに新規URLを設定しても、すぐにはURLが変更されないようです。その割にAppleScriptの実行は完了したものとして次の行へと進んでしまいます。普通、こんな挙動を行うアプリケーションはないのですが(OCRで見たことがあったかも?)、ただ、逆にここで処理待ちすると問題が発生するケースもありそうです。
非同期モードと同期モードの両方が存在していて、明示的に選択できるとよいのですが、現状ではそうなっていません。
仕方がないので、旧URLから新URLへの切り替えをループで見張るという処理を書いてみたら、いい感じにローディング検出できました。
AppleScript名:SafariでURLローディング検出.scpt |
— – Created by: Takaaki Naganoya – Created on: 2020/08/09 — – Copyright © 2020 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set aURL to "http://piyocast.com/as/" on openURLWithSafari(aURL as string) on detectPageLoaded(timeout_value, oldURL, newURL) on getBodyTextFromSafariFrontWindow() |
SafariでURLをローディング – AppleScriptの穴 says:
[…] うになってきたため、書き直したルーチン「SafariでURLローディング完了検出」を利用してください。 […]