Tags : Safari

このTagsの登録数:16件 表示 : 1 - 7 / 16

2009/01/05

Safari で選択語によるサイト内検索する Bookmarklet (Safari の getSelection の挙動)

Tiger マシンが家に 1台あるのですが、この度、ようやく Mac OS X v.10.4.10 から 10.4.11 にアップデートしました。10.4.11 にしていなかったのは、ひとえに 10.4.11 により Safari 3 に移行すると、AcidSearch が使えなくなってしまうという理由によるものです1

Safari の組み込み検索フィールドを拡張する

AcidSearch のように Safari の検索ボックスを拡張するプラグインの代替としては以下のようなものがあります。

  • Yahoo! に買収された Inquisitor
  • 検索ボックスの拡張に留まらない多機能プラグイン Glims

Safari の Google 検索窓ではなく、Firefox のスマートキーワードのようなアドレスバーからの検索なら、以下のようなプラグインがあります。

  • これまた Safari 使いには欠かせない多機能プラグイン SafariStand
  • 単機能なら Keyurl(現在、サイトにつながりません…)

Google のサイト内検索を簡単にしたい

前置きが長くなりましたが、上記に紹介したような AcidSearch 代替プラグインでは、どうしてもできないことがあります。サイト検索です2。私はサイト内検索をすることが多いので、これができないとどうしても効率に不満が残ります。AcidSearch はサイト内検索ができたので、よかったのです。

いろいろ調べてみたのですが、現在、Safari のプラグインでこのサイト検索ができるものはなさそうです。Firefox や IE なら Google ツールバーを使う方法もあるのですが…。

サイト内検索をするブックマークレット

しかたないので、サイト内検索は Bookmarklet で実現することにしました。もう既に誰かが同様のものを作っていそうなきもしますが、以下で公開しておきます。

javascript:l=location.hostname;k='%22'+encodeURIComponent(window.getSelection())+'%22';window.location='http://www.google.com/search?as_q='+k+'&as_sitesearch='+l;

使い方は、下記のリンクをブックマークしておいて、必要なときに呼び出すだけです。選択した単語部分をそのとき開いているサイト内で Google のサイト検索を用いて検索結果を表示します。

検索結果は同一ウインドウで開きますが、新規ウインドウで開きたい場合は、window.location の部分を window.open にすればいけると思います。

この Bookmarklet をブックマークバーの一番左に置いておけば、⌘1 (cmd+1) で一発でサイト内検索を行うこともできます3

Safari の window.getSelection() の挙動

このブックマークレットを作るにあたって、ちょっとハマったのが、Safari の window.getSelection() の動作でした。

Safari では window.getSelection() はオブジェクトとして返ってくるのですが、それを例えば window.getSelection().toString() としても、テキストが得られないようなのです。

プロパティを調べると、toString:[function] が定義されていることもわかる(toStringしか定義されていないこともわかる)。しかし、s.toString()=undefined なのだ。alert(s) とすれば、選択された文字列が表示されるので、toString()は実装されているように思うのだが。。。

いろいろ調べてみたのですが、WebKit Bugzilla #46094 なんかを見てみると、toString は Firefox と同様に動くようになったと書いてあります。ただ、上記の記事が 2007年 4月、#4609 の Fix は 2006年 1月なので、直っていてよさそうなものなのですが、Safari 3 になるまで修正が入らなかったのかもしれません。

この問題があったときに、回避策として window.getSelection() をテキストにする方法は、検索するといくつかでてきました。

  • str=window.getSelection()+'';
  • str=unescape(escape(window.getSelection()));

前者は、空のストリングを付加して、window.getSelection() の返すオブジェクトをテキストに変えているようです。

後者も似たようなものですが、私が公開している Title+URI+Text.scpt で使っている方法です5

そんなわけで、以下のようなコードを書いてみました。

javascript:l=location.hostname;k=window.getSelection();k='%22'+k+'%22';window.location='http://www.google.com/search?as_q='+k+'&as_sitesearch='+l;

これでうまく動くような感じだったのですが、落とし穴がありました。このコードだと、取得した文字列が元のページの文字コードに依存する形になり、文字列を Google に渡したときに元のページの文字コードに基づいて URI エンコードした形で URL に検索クエリが入ってしまうのです。UTF-8、Shift_JIS のページでは問題なく動いたのですが、EUC-JP のページではクエリが文字化けしてしまうことが判明しました。

どうしたものかなーと思ったのですが、ページから取得した文字列を encodeURIComponent したところ、UTF-8 で URI エンコードされた文字列になったので、めでたく動くようになりました。

というわけで、簡単かと思いきや、意外に手数をかけてしまいました。


  1. 当初はそれ以外にも Safari 3 非対応プラグインが多かったのでアップデートをためらっていたのですが、ほとんどが Safari 3 対応、もしくは別の代替手段が出てきたために、AcidSearch が私には最後の障害となっていました。 

  2. Bookmarklet に限らず、Safari のブックマークバーに登録されているブックマークは左から順番に (cmd) + 数字 のキーボードショートカットが割り振られています。 

  3. Bug 4609 - window.getSelection().toString() is undefined (range object returned from window.getSelection() is useless) 

  4. window.getSelection() で AppleScript から Safari の選択テキストが取得できなくなったために採用した方法なのですが、なんでこうする必要があるのかという背景は今回知りました。 

ポスト @ 1:00:53 , 修正 @ 2009/06/01 1:28:13 | , , , | 「このエントリーを含むはてなブックマーク」ボタン この記事「Safari で選択語によるサイト内検索する Bookmarklet (Safari の getSelection の挙動)」を含むはてなブックマークの数

2008/02/19

iPhone を待って買い控えているあなたこそ iPod touch を買うべき

単に iPod としても価値がある

Amazon.co.jp: Apple iPod touch 16GB MA627J/A: エレクトロニクス

最近、うむらうすのハルさんも iPod touch を購入されたようですが、ほんと、iPod touch はお勧めです。

私は普通の iPod や iPod shuffle も持ってますが、最近は touch しか使わなくなってしまいました。使っていて楽しいのがその何よりの理由。

iPod touch というと、Mobile Safari や様々な付加機能が話題になることも多いですが1、基本である Music Player としてだけ使っていても、かなりの魅力があります。

ちなみにそれらの魅力は店頭のデモ機に触ったくらいでは、まだまだ理解不十分です。やはり、自分自身の iPod touch で、自分の音楽アルバムや写真をマルチタッチしまくり、自分のメールを読んだり自分の好きなウェブコンテンツを見たりすることでその魅力がわかってきます。所有しないとわからない楽しさというのは、確実にあると思います。新しい Mac を買っただけでにんまりできますが、さらにその Mac を自分好みに使い倒す時のにんまり感、と言えば、多少は想像できるでしょうか。

日本での iPhone 発売が近々なのか、今年のずっと後半なのか、一般人にはなかなか見えないところですが2、iPhone が出たら買おうと思っているあなたの、iPhone 入手までの iPhone に触らない日々はもったいないと思います。

機能というのは楽しんでこそ、元手が回収できるもの。1日でも早く iPod touch を購入して、iPhone/iPod touch のマルチタッチの快感を楽しむべきと思います(もちろん資金に余裕があるなら)。

iPhone が発売された暁には、それまで使った iPod touch は、モバイル SUICA がないと困る等、既存の携帯電話が手放せない友人に譲ったらいいんじゃないでしょうか。

iPod touch の魅力

  • 音楽再生
    • Cover Flow でのアルバム選択最高。思わず人に触らせたくなる。
    • 先日加わった歌詞表記機能。従来の iPod より見やすく、歌詞だけでなく、Podcasting での英語学習にも最適3
    • 画面ロック中でも(ロック中じゃなくても)、ホームボタン二度押しで曲の再生/停止やボリューム調節可能。時計も表示される4
  • 写真
    • フォトビューアとしても最高。回転させたり、拡大したり、極め付きはフリックでのスクロール5。単にこの機能にカメラ付けてデジカメとして売ってもいいんじゃないかと。(iPhone にはカメラ付いてるんだけども)
  • マップ
    • 飲み会のお店なんかもこれで場所を調べて行く。無線 LAN 入らないこともあるけど、あらかじめ表示させとけば(その部分は)使える。
    • Wi-Fi 使えれば、近所の店調べるのにも便利。
  • メール
    • 手軽にチェックできて読みやすい。パソコン開かなくていいので、家でもメールのチェックだけなら iPod touch だけで結構済ましてる。
    • 標準のメールだけでなく、iPhone/iPod touch に最適化されたインターフェイスの Gmail が何気に使いやすい。アーカイブ・ラベル付けも簡単。
  • フィード (RSS/Atom リーダ)
    • デスクトップで NetNewsWire6 を使ってるけど、http://m.newsgator.com/iPhone.aspx で同期しながら同じフィードが読める。(要オンライン)
    • iPhone/iPod touch に最適化されたフィードリーダには、Google Readerlivedoor Reader lite なんかもあります。
  • ウェブ
    • モバイル Safari でほぼウェブページの閲覧は問題なし。携帯電話のフルブラウザなんかでウェブを見る気が起こらない。
    • Gmail とか、フィードリーダーとか、お気に入りのウェブアプリケーションは、アイコンとして登録すると楽。
    • 画面最上部へ移動する(Mac で home 押した時の挙動)には、最上部のバー(時刻やバッテリ残量の表示エリア)にタッチする7
    • リンクを長押しすると、リンク先の URL を表示する。

魅力(および Tips)はいろいろありますが、とりあえずこんなところでしょうか。

iPod touch キー入力の Tips

キーボードも長文打つのはともかく、慣れると入力は意外に楽です。各所で紹介されてますが慣れの他にコツもあって、例えば以下のようなもの。

  • キーに触ってもすぐ指を離さない。間違って隣のキーに触った場合はそのまま指を正しいキーにスライドさせる
  • 1文字の数字/記号入力は、キーボードを切り替えなくても 123 キーに触れた後、そのまま指を離さず目的の数字記号上で指を離せば OK8
  • 入力済みの文字上でのカーソル(キャレット)の移動は、画面を長押しすると、虫眼鏡様に拡大されてやりやすい。
  • いっぺんに文字を削除する時は、del キーに触れたまま、指を左にスライドさせる

他にもあるかもしれませんが、これらは私がよく使っているものです。

Wi-Fi の認証で、アカウント名やパスワードを毎回入力するのが面倒な人は、下記のブックマークレットを活用すると幸せになれます。

iPod touch/iPhone 用ものぐさ入力 Bookmarklet

後、個人的に使っている原始的な(?)ブックマークレットもご紹介。

Safari で表示されている画面上のすべての入力欄9account@gmail.com という文字を入力するというものです。account@gmail.com の部分は適宜書き換えてください。非常に雑なスクリプトですが、場面によっては使えるでしょう。ちょっと改造すればパスワード入力にも使えますが、ブックマークに平文でパスワードを格納するのはためらわれたので、自分では作っていません。

使い方としては、以下のリンクを Safari のブックマークに登録し、account@gmail.com の部分を編集して、自分の入力したい文字に置き換えた後に、iPod touch と iTunes で同期させて下さい。そして、iPod touch の Safari 上で入力したいなと思った時に、ブックマークを開いてクリック。そうすると、画面上の入力欄すべてがあなたの置き換えた文字で埋められるでしょう!

Amazon で iPod touch を見る

容量増量後の新モデル iPod touch
旧モデル iPod touch

※ 旧モデルはメールやマップなどの新機能を使うために、2,480円のソフトウェアアップグレードが必要と思われます。


  1. 機能が素晴らしいだけに、Wi-Fi 限定で iPhone のようにいつでもどこでもつながらないことに残念な感じはもちろんありますが。 

  2. 「iPhoneのiモード搭載にこだわりはない」という最近の記事で、ドコモの人が実際にAppleと話をしていることは事実です。しかし、詳細を詰めた議論はしていません。決定権はApple側が持っているので、何とも言えない状況ですと言っているので、iPhone の日本でのサービス展開にはまだ時間かかるかも? 

  3. ESL Podcast などいかがでしょう。参考:fladdict.net blog: 英語の勉強したい人はiknowよりESL Podcast聞こうぜ 

  4. Long and Winding Mac: 音量調節はロックをはずさなくても可能 - iPod touchをもっともっと使いこなそう(その1) 

  5. iPod touch: マルチタッチスクリーンの使い方 

  6. NetNewsWire はシェアウェアだったのが無料になりました。機能面では Mac OS X のフィードリーダで No.1 と言えるのでは。 

  7. Long and Winding Mac: あるWebページを見ていて、一部を拡大表示しているとする。素早く画面をリフレッシュするにはどうすればいいか? - iPod touchをもっともっと使いこなそう(その1) 

  8. Long and Winding Mac: WebサイトのURLをタイプインするとき、数字や.を入力するのが面倒。何かいい方法は? - iPod touchをもっともっと使いこなそう(その1) 

  9. input 要素で type=text のフィールドのみ。パスワード欄や複数行のテキストアリアは対象外。入力欄に見えても type=text になっていないと入力しない(例えば Google の検索フィールド)。 

ポスト @ 2:07:59 , 修正 @ 2008/02/20 2:03:37 | , , , , , | 「このエントリーを含むはてなブックマーク」ボタン この記事「iPhone を待って買い控えているあなたこそ iPod touch を買うべき」を含むはてなブックマークの数

2008/01/21

Safari が起動後、数秒後にクラッシュする

急に Safari が起動後にクラッシュするようになってしまって、あれやこれや原因を追及していたのですが、AcidSearch1 が原因だと言うことが判明しました。(SafariStandForgetMeNot も疑ってみたのですが、濡れ衣でした。)

結論から言うと、Library/Preferences にある com.pozytron.AcidSearch.plist という AcidSearch の設定ファイルが壊れていたのが直接の原因でした。com.pozytron.AcidSearch.plist を捨てて Safari を起動したところ、あっさり直りました。私が検索した限りではネット上で解決策が見つからなかったので、珍しい不具合かもしれませんが、他の方の参考になるかもしれないので、記事として挙げておきます。(なお、その後の検索で、同じかなと思われる現象を見つけました2。そこに解決策も書いてありました…。)

クラッシュログも一応載せておきます。

もっと読む...


  1. AcidSearch は Safari ウインドウ上の Google 検索フィールドを拡張して、そこからいろいろな検索ができるようにする SIMBL プラグインです。2008年1月21日現在、AcidSearch の配布を行っている pozytron.com のドメインが無効になっているようです。一時的なものだといいのですが。これがないと生きていけません…。 

  2. Apple - Support - Discussions - safari quits unexpectedly all of a sudden 

ポスト @ 1:23:42 | , , | 「このエントリーを含むはてなブックマーク」ボタン この記事「Safari が起動後、数秒後にクラッシュする」を含むはてなブックマークの数

2007/10/16

Apple の iPhone/iPod touch 開発ドキュメントの一覧

自分用に Apple の iPhone/iPod touch 開発ドキュメントの一覧をまとめてみます(2007年10月15日現在/2007年12月4日更新)。意外に見つけにくいんですよね。

気が向いたら、この記事をアップデートして、補足コメントを付けてみたいと思ってます。

基本中の基本

iPhone 関連の Reference Library

その他のリソースとしては、ADCReference LibraryiPhone の項などがあります。

iPhone の Reference Library 一覧

以下に iPhone のリファレンスのリンク構造を可視化しました。重複がありますが、そのままにしています。

Apple による iPhone Dev Center (追記)

が公開されました。

iPhone Tech Talk のビデオも公開されており、よくまとまっています。

ポスト @ 0:15:58 | , , , , | 「このエントリーを含むはてなブックマーク」ボタン この記事「Apple の iPhone/iPod touch 開発ドキュメントの一覧」を含むはてなブックマークの数

2007/10/11

iPhone/iPod touch の viewport の概念の補足

Safari on iPhone/iPod touch に導入された meta 要素の viewport 属性ですが、使ったことがない人にはなかなか理解しづらいようなので、ちょっと補足しておきます。こんな突っ込みもあったので。

リキッドにしとけばいいだけの話とちゃうの?

いや、違うんですよ。

前回、viewport は仮想的なウインドウということを説明しましたが、この仮想ウインドウは、閲覧しているユーザによって大きさを変更できない、サイズ固定のウインドウなわけです。

そして、Safari on iPhone/iPod touch は、基本的にこの仮想ウインドウの(横幅)全体が、横幅 320px(縦持ち時)のディスプレイに納まるように、縮小(もしくは拡大)して表示しようとします。

viewport のデフォルト設定は 980px。980px を 320px 液晶に納めるために約 1/3 に縮小されて表示されます。よっぽどフォントサイズを大きく設定していない限り、拡大しないと読むのはつらい大きさです。

ウインドウサイズ固定なので、リキッドレイアウトであるかないかは、この点においてはあまり関係ないでしょう。リキッドレイアウトのメリットは、どんなウインドウ幅でも柔軟に表示できることですが、viewport を設定しない限り、リキッドであろうがなかろうが、Safari on iPhone/iPod touch は 980px 幅のウインドウでブラウズした状態でページを表示します。ということは、結局、約 1/3 に縮小して表示されてしまいます。ウインドウ幅固定なのでリキッドレイアウトの利点が活かせません。

viewport を自ら設定する際は、リキッドレイアウトの利点が活きてくると思います。一方、固定幅のレイアウトのサイトで、その幅が 900px のようなデフォルトの 980px とあまり変わらない値なら、viewportwidth=900px に設定したところで、Safari on iPhone/iPod touch での表示はほとんど変わらず小さいまま(320/900 = 約 1/3)です。

リキッドレイアウト等を用いており、サイト幅が柔軟に変更できるなら、例えば viewportwidth=640px と設定すれば、縮小率を 1/2 程度に抑えられます。このくらいだと拡大せずに十分文字の読める大きさです。 width=320px にしても破綻を来さないデザインなら、等倍で表示させることもできます。

具体的な viewport の設定方法は前回の記事をご参照ください。

おまけ:viewport を設定した人たちの喜びの声が!

インチキ通販にありそうな見出しですが、リファラより。

もっと読む...

ポスト @ 0:55:15 | , , , , | 「このエントリーを含むはてなブックマーク」ボタン この記事「iPhone/iPod touch の viewport の概念の補足」を含むはてなブックマークの数

2007/10/02

iPod touch/iPhone の viewport 属性の区切りはセミコロンではなくカンマ

viewport 属性の区切りはセミコロンじゃなくてカンマじゃない?

日本でも iPod touch/iPhone 用のウェブサービス・インターフェイスが続々出てきましたが、実際に使われている meta 属性の viewport プロパティの区切りが2種類存在することに気が付きました。カンマ(コンマ)を使っているところと、セミコロンを使っているところです。

カンマ区切りの viewport
<meta name="viewport" content="width=320, user-scalable=no /">
セミコロン区切りの viewport
<meta name="viewport" content="width=320; user-scalable=no; /">

Apple の開発資料12345に示される例は、すべてカンマ区切りとなっているので、カンマ区切りが望ましいと思われます。最初そのことに気がつかずに、セミコロン区切りで書いたものをコピー&ペーストしていました。

すると user-scalable=yes にしているにも関わらず、拡大縮小ができなくなってしまいました。ちょっと悩んだ末に、区切り文字の違いに気がつき、カンマ区切りに修正したところ、きちんと拡大縮小できるようになりました。ちなみに user-scalable の設定は Safari on iPhone/iPod touch に対してだけでなく、デスクトップの Safari 3 にも影響があり、user-scalable=no で文字の拡大縮小ができなくなるようです。(訂正:デスクトップの Safari 3 で拡大縮小ができないのは、-webkit-text-size-adjust: none; という CSS のためでした。)

user-scalable=yes; で Safari for iPhone/iPod touch のピンチ動作が使えなくなる(追記)

上記で、カンマ区切りにしたときに、拡大縮小ができなくなったのは、user-scalable の後にあるセミコロンが原因ということがわかりました。viewport 属性の区切りはセミコロンでも一応動くようなのですが、

<meta name="viewport" content="width=640; user-scalable=yes; /">

user-scalable の後にセミコロンを付けると、user-scalable の値が偽になるのか、拡大縮小ができなくなります。セミコロンを付けずに

<meta name="viewport" content="width=640; user-scalable=yes /">

とする分には、拡大縮小含め、一応正しく機能しているようです。しかし、Apple の開発ドキュメントに習えば、セミコロンではなくカンマを使った方が無難でしょう。

viewport 属性の区切りの例

カンマ区切りの viewport の例:

  • Apple の開発ドキュメント
  • Apple の iPhone 開発用サンプルコード[^TL-154_iPhoneDev4]
  • iPod touch/iPhone 用 NHK ウィジェット6

セミコロン区切りの viewport の例:

  • Google 検索7、カレンダー、リーダー8
  • livedoor Readre lite9
  • ナタリー touch!10
  • みんなで作る話題発見サイト トピックイットiPod対応β版:@nifty11

実はこれらのサイトはことごとく iPod touch/iPhone 専用インターフェイスで、かつ、user-scalable=no にしているものが多いので、viewport の設定が壊れていても影響が出ていないのだと思います。

ポスト @ 1:03:51 , 修正 @ 2007/10/05 22:27:30 | , , , , | 「このエントリーを含むはてなブックマーク」ボタン この記事「iPod touch/iPhone の viewport 属性の区切りはセミコロンではなくカンマ」を含むはてなブックマークの数

2007/09/29

iPhone 用 Google Reader、Google Calendar の設定を見る

F.Ko-Ji さん経由で、iPhone 用の Google SearchGoogle ReaderGoogle Calendar が公開されたのを知りました。

興味があったので、Google が iPhone に対してどのような設定をしているのが、見てみることにしました。

もっと読む...

ポスト @ 0:25:23 , 修正 @ 2007/10/01 23:44:16 | , , , , , | 「このエントリーを含むはてなブックマーク」ボタン この記事「iPhone 用 Google Reader、Google Calendar の設定を見る」を含むはてなブックマークの数