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:""}

Safari7から
  • 何も返らない...。(なぜこうなった?)


missing value

対策

_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にアップロードして管理することにした。
  • hubコマンドを使うと、苦労最小で公開できる。
# 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属性を追加
(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(ログイン情報取得)を実行してみる。
    • これで、入力されたお客さま番号が保存される。



  • スクリプトメニューからauto_login/auto_login(自動ログイン)を実行してみる。
    • きっと、先ほどのお客さま番号が復元されるはず。


ブックマークレットに変換

  • と同時にSafariが開き、そのJavaScriptを埋め込んだauto_loginのリンクが表示される。



あらゆるフォームが保存対象
  • 保存される情報は、テキストボックスだけではない。
  • チェックボックスラジオボタン・セレクトメニューなど、あらゆるフォームの情報が保存されるのだ。
  • よって、ログインページに限らず、通販ページの送付先情報などを保存しておくことも可能である。
  • 会員登録できない通販サイトで定期的に購入する場合など、素早く買い物できて便利かもしれない。
安全性
  • 保存する情報には、opensslでマスターパスワードをキーに暗号化している。
  • スターパスワードは、sha1ハッシュ化して保持している。
  • スターパスワードを知らなければ、暗号化された情報は解読できないはず。
バージョン系統 影響を受けるバージョン 修正バージョン
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 (リリース予定)
      • OSX 10.9.3にデフォルトインストールされるopensslには、HeartBleed脆弱性は存在しない。(古いけど)
$ openssl version
OpenSSL 0.9.8y 5 Feb 2013


Safariで再び快適に自動入力できるようになった!

*1:ブックマークに埋め込まれたJavaScript