上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--|スポンサー広告||TOP↑

Mac 内のファイルを Safari で開くとアドレスバーにパスが出ますが、空白などがエスケープされているために、(URL of document 1) as POSIX file と書いても Finder などで alias として扱える文字列にならないことがあります。
以下のように書くことで解決できました。

tell application "Safari"
set theURL to (URL of document 1)
if theURL starts with "file:" then
set thePath to (do JavaScript "decodeURIComponent(¥"" & theURL & "¥")" in document 1)
else
return
end if
end tell

set hfsPath to (thePath as POSIX file) --HFSパスにする。

(*
tell application "Finder"
activate
--open container of hfsPath
select hfsPath
end tell
*)

webarchive、html、txt、pdf、jpgの書類で確認。
ただし webarchive か html 以外の書類をドラッグ&ドロップで開いていた場合、
スクリプトを実行すると Safari 上でページが空白になってしまう模様。
実行の過程で変数 theURL に元のパスを入れているので

tell application "Safari" to open location theURL
などとして開き直すことはできます。


追記

「しかしどんなときにこのスクリプトが必要になるんだろう」と、送信した後で考え込んでしまいました。
で、こんなシチュエーションはどうでしょう。
頻繁に参照する覚え書き (Terminal のコマンドとか 頻出するパス品とか) を HTML の DL や UL 要素を使った読みやすいリストにして、ローカルのファイルとして Safari のブックマークに入れているとします。
それを読みながら「ここを編集したい」と思ったときに上記のスクリプトに続けて

tell application "mi"
activate
open hfsPath as alias
end tell
などと書いたスクリプトを実行すれば、いま読んでいるファイルをいちいち Finder に戻って探さなくてもダイレクトにエディタで開けるわけです。
その場合、誤って画像や Web アーカイブをエディタで開こうとしないように
if theURL starts with "file:" then
という行を
if (theURL starts with "file:") and (theURL ends with ".html") then
などとしておいたほうがよいかもしれません。


さらに追記

decodeURIComponent() を使う必要はなく、location.href で簡単に取得できることがわかりました。

tell application "Safari" to do JavaScript "location.href" in document 1
ただし decodeURIComponent() の結果が file:/// となるのに比べて location.href では file:/ とスラッシュの数が少なくなります。どう違うのかわかりませんが、AppleScript で扱う分には問題ないようです。
他にユニコード絡みの問題もあったので、もう少し頑張ってみました。

Safari で開いているローカル HTML を mi で開く AppleScript
(\ ←これが円マークで表示されている場合 backslash に置き換えないと実行できません。)

tell application "Safari" to set theURL to (do JavaScript "location.href" in document 1)

if (theURL starts with "file:") then
--パスの末尾が html#hoge のようなときも HTML として認識するように
set tmp to AppleScript's text item delimiters
set AppleScript's text item delimiters to "."
try
set curStr to every text item of theURL
if last item of curStr starts with "html" then
set curStr2 to "" as Unicode text
--Unicode text だと従来の方法で文字列に戻せない。
--なので repeat を使う。
repeat with i from 1 to ((number of items of curStr) - 1)
set curStr2 to curStr2 & (item i of curStr) & "."
end repeat
set theURL to curStr2 & "html"
else
return
end if
on error
set AppleScript's text item delimiters to tmp
end try
set AppleScript's text item delimiters to tmp
editIt(theURL)
end if

on editIt(pathString)

--起動ディスクの名前
tell application "Finder" to set mDiskName to (name of startup disk)

try --まずは普通に変換してみる
set hfsPath to (pathString as POSIX file)
on error --パスにユニコード文字があるとエラーになるので sed で置換
set hfsPath to (do shell script "echo " & (quoted form of pathString) & " | sed 's/file:\\/Volumes\\///g;s/file:/" & mDiskName & "/g;s/\\//:/g'")
--mDiskName に空白が含まれていても問題ないみたい。
--逆に quoted form of とやるとエラーになる。
end try

try --まずは mi に tell してみる。
tell application "mi"
activate
open hfsPath as alias --ユニコード混じりパスだとここでエラー。
end tell
on error --Finder におまかせ。
tell application "Finder" to open hfsPath using application file (mDiskName & ":Applications:mi2.1(OSX):mi.app")
--mi.app までの正確なパスが必要。
end try

end editIt


さらにさらに追記

アドレスバーから mi にドラドロでいけた_| ̄|○

(このエントリここまで。"続きを読む"はありません。)

スポンサーサイト

02/04|AppleScriptコメント(0)トラックバック(0)TOP↑
この記事にコメント
名前:
コメントタイトル:
メールアドレス:
URL:
コメント:

パスワード:
管理人だけに表示:
管理者にだけ表示を許可
この記事にトラックバック
プロフィール

AquaBowler

  • Author:AquaBowler
  • 現在の Mac 環境:
    iBook Late2001
    Mac OS X 10.4.11
フリーエリア
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
del.icio.us
feed meter

RSS feed meter for http://kotoerisan.blog16.fc2.com/

FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。