flavors.me/amberjack

March 3, 2012

iPhone/iPad の Safari で www.icloud.com を利用する はてなブックマーク - Golbym!: iPhone/iPad の Safari で www.icloud.com を利用する

タイトルままです。なんだか、誰得な事を実験するブログみたいになってきました。

通常、iPhone や iPad から icloud.com を開くと「あんたはアプリ使ってアクセスしろよ」的なページへリダイレクトされてしまうのですが、それをスクリプト(ブックマークレット)を実行することにより強引に使ってしまおうというものです。

モバイルデバイスからアクセス出来たところで特に良い事はないばかりか、サイトの構造的に使い難い事この上ないのですが、たった一つだけ iPhone/iPad 単体では出来ないことがあります。 それは、フォトストリームのリセットです。男子たるもの、フォトストリームに上がりっぱなしでは些か具合がよろしくない物の一つや二つはあると思いますが、それが PC 環境無しでリセット出来るだけでも需要はあるのかな、と思い公開しました。 iOS 5.1 で iPhone/iPad からもフォトストリームの写真削除が出来るようになりました。短い命であった。というわけで、このブックマークレットは、なにがなんでも iPhone の小さい画面で icloud.com を操作したいエクストリームタッチパネラー、または iPad 所有者向けです。 強引な手法を用いているため、icloud.com の仕様が変われば使えなくなると思います。

注意:2012-09-21現在、使用不可

なんかいつの間にか使用できなくなってましたね。iCloudのアイコンに通知バッヂが点くようになってからかな? というわけで、もうこのブックマークレットは使えません。

(2013-01-26 追記)コメ欄で教えていただいたのですが、今でも使えるようです。 手順としては、モバイル端末用の案内ページで一度ブックマークレットを実行した後、ローディングアニメーションがぐるぐる回っている画面でもう一度ブックマークレットを実行すれば、ログイン画面が表示できます。

ブックマークレットの登録方法

以下の「iCloud for Mobile」リンクを開き、適当な名称でブックマーク登録後、URL 先頭の http://t.co/? を削除して保存してください。 慣れている方はコードを直接コピペしてお使いください。

iCloud for Mobile ver.0.1r2 - WTFPL version2

ブックマークレットの使用方法

Mobile Safari にて icloud.com へアクセスすると、自動的に /iphone_welcome/ または /ipad_welcome/ へリダイレクトされますが、その状態で本ブックマークレットを実行します。しばらく待つとローディングアニメーションが表示された画面で再度ブックマークレットを実行すると、小さくて非常に使い辛いログインページが表示されるので、通常通りログインして使ってください(ブラウザのズームレベルうんからかんたら言われますが華麗にスルー)。 iPad や Retina な iPhone でないと、フォントサイズが小さすぎて読めないかもしれません。 また、ページ自体がかなり重く、何かアクションをする度にしばらく待つ必要があります。

Wow! 使い辛い!!

フォトストリームについて

  • フォトストリームのリセットは、icloud.com にログイン後、トップページ右上のユーザー名をタップすると表示されるダイアログから行います
  • フォトストリームをリセットしても、iCloud 上の写真が消えるだけで、直様モバイルデバイスから写真が消えるわけではありません。リセットした後、設定 » iCloud にてフォトストリームをオフ&オンする必要があります

何をやっているか

興味のない方は読み飛ばしておkです。このブックマークレットが何をやっているかをメモ書きします。

  • まず、外部 CDN から jQuery ライブラリを読み込みます。jQuery 無しでもコーディング量はさほど変わらない気がしますが、後述する XMLHttpRequest 取得した HTML 内のスクリプトを実行する必要があったため、jQuery に頼ることにしました(当初は zepto.js を使おうとしたが、zepto.js の appendhtml の実装はスクリプト実行処理が組み込まれていない模様)
  • /iphone_welcome/ を開いた時点でブラウザ判定用の JavaScript オブジェクトが作成されているので、そのプロパティを上書きします。強引にデスクトップ版 Safari という事にしています。ついでに window.navigator オブジェクトそのものもダミーのオブジェクトで上書きします(汚染だけど、ライフサイクルはこのセッションだけだし別に良いかなと)
  • www.icloud.com/ を $.ajax で取得し、現在のページの head/body 内容を置き換えます。サーバーサイドでの User-Agent による振り分けはしていないようですね
  • そのままの表示スケールでは操作不能なので、meta name="viewport" を書き換え、表示サイズを調整します
  • history.pushState() を用いて URL を書き換えます