auto_loginスクリプトのSafari7対応
あらゆるWebページで自動入力を可能にするauto_loginスクリプト(自作)が...
たぶんSafari7以降、使えなくなっていた。激しく不便!な状態が続いていた。自作なので自分で直すしかない...。
原因
- Safariがサポートするjavascriptにおいて、window.locationあるいはdocument.locationが返す値が変化していた。
tell application "Safari" to do JavaScript "window.location" in document 1
Safari5まで
- window.locationのプロパティがすべて、レコードとして返る。
{origin:"http://d.hatena.ne.jp", protocol:"http:", hash:"", pathname:"/zariganitosh/20140523/minimum_bash_keybind", hostname:"d.hatena.ne.jp", |port|:"", href:"http://d.hatena.ne.jp/zariganitosh/20140523/minimum_bash_keybind", |host|:"d.hatena.ne.jp", search:""}
対策
_login_base.scptを以下のように修正した。
- Before(このままではmissing valueになってしまうので...)
↓
on url_info() tell application "Safari" to do JavaScript "document.location" in document 1
end url_info
- After(コード中で利用するoriginとpathnameをキーに持つレコードを作って返す)
on url_info() tell application "Safari"
{origin:(do JavaScript "document.location.origin" in document 1) ¬ , pathname:(do JavaScript "document.location.pathname" in document 1)} end tell
end url_info
参考:locationのプロパティ
location.href |
---|
http://d.hatena.ne.jp:80/zariganitosh/searchdiary?word=ruby&.submit=%B8%A1%BA%F7&type=detail#c |
location.origin |
---|
http://d.hatena.ne.jp:80 |
location.host |
---|
d.hatena.ne.jp:80 |
location.protocol | location.hostname | location.port | location.pathname | location.search | location.hash | ||
---|---|---|---|---|---|---|---|
http: | // | d.hatena.ne.jp | : | 80 | /zariganitosh/searchdiary | ?word=ruby&.submit=%B8%A1%BA%F7&type=detail | #c |
GitHub
# GitHubに新規リポジトリを作成 (master)$ hub create Updating origin created repository: zarigani/auto_login # 最初のアップロード (master)$ git push -u origin master Warning: Permanently added the RSA host key for IP address 'xxx.xxx.xxx.xxx' to the list of known hosts. Counting objects: 15, done. Delta compression using up to 8 threads. Compressing objects: 100% (14/14), done. Writing objects: 100% (15/15), 113.44 KiB | 0 bytes/s, done. Total 15 (delta 1), reused 0 (delta 0) To git@github.com:zarigani/auto_login.git * [new branch] master -> master Branch master set up to track remote branch master from origin.
- コンパイル済み(バイナリファイル)のAppleScriptもちゃんとdiffできるように設定しておいた。
# AppleScriptのdiff属性を追加 (master)$ echo '*.scpt diff=applescript' >> .gitattributes (master)$ git add . (master)$ git commit [master b17bd49] AppleScriptのdiff属性を追加 1 file changed, 1 insertion(+) create mode 100644 .gitattributes # AppleScriptをdiffする設定を追加 (master)$ git config diff.applescript.textconv osadecompile (master)$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true [diff "applescript"] textconv = osadecompile # 2回目以降のアップロード (master)$ git push
インストールと使い方
準備
- ダウンロードして解凍したauto_loginフォルダを、スクリプトフォルダ(~/Library/Scripts/auto_login)に移動する。
- AppleScriptエディタ >> 環境設定... >> 「メニューバーにスクリプトメニューを表示」を有効にしておくと便利。
入力情報の保存と復元
- 例えば、ゆうちょダイレクトのログインページを開いて、お客さま番号を以下のように入力してみる。
- スクリプトメニューからauto_login/save_login(ログイン情報取得)を実行してみる。
- これで、入力されたお客さま番号が保存される。
- その後、ゆうちょダイレクトのログインページを再読み込みして(command-R)、一旦、お客さま番号をクリアする。
- スクリプトメニューからauto_login/auto_login(自動ログイン)を実行してみる。
- きっと、先ほどのお客さま番号が復元されるはず。
ブックマークレットに変換
- さらに、auto_login/ブックマークレット作成.scptを実行してみる。
- すると、クリップボードに自動入力するJavaScriptがコピーされる。
- と同時にSafariが開き、そのJavaScriptを埋め込んだauto_loginのリンクが表示される。
- auto_loginのリンクをブックマークバーにドラッグ&ドロップすれば、ブックマークレット*1として保存される。
- Safariのブックマークは、iCloud経由で、その他のMac、iPhone、iPadなどの端末で同期される。
あらゆるフォームが保存対象
安全性
- 保存する情報には、opensslでマスターパスワードをキーに暗号化している。
- マスターパスワードは、sha1ハッシュ化して保持している。
- マスターパスワードを知らなければ、暗号化された情報は解読できないはず。
-
-
- ちなみに、最近opensslのHeartBleed脆弱性が指摘された。その脆弱性の対象となるのは...
-
バージョン系統 | 影響を受けるバージョン | 修正バージョン |
---|---|---|
1.0.1系 | 1.0.1 から 1.0.1f までのリリース | 1.0.1g |
1.0.2-beta系 | 1.0.2-beta から 1.0.2-beta1 までのリリース | 1.0.2-beta2 (リリース予定) |
$ openssl version
OpenSSL 0.9.8y 5 Feb 2013
Safariで再び快適に自動入力できるようになった!
*1:ブックマークに埋め込まれたJavaScript