Program

iOS7のブックマークレットでwindow.open()を使うと挙動がおかしい

こんばんは、ころすけ(@wg_koro)です。

iPhone iOS7

私のiPhoneはiOS7(7.0.2)にしているのですが、こいつのSafariで変な挙動を発見。

ブックマークレットでwindow.open()すると、オープンしたページがアクティブにならない。

ただのタップだと大丈夫

下記のようなページを用意して、Aリンクをタップする。 実際のデモページ
デモページ

タップすれば、「Opened!」と書かれたページがフォアグラウンドで開く。これは期待した動作で問題なし。
opened!ページ

ブックマークレットだとアカン

次に、下記のようなjavascriptをブックマークレットで実行する。

ブックマークレット登録ページ
※一度上記ページをブックマーク登録して、ブックマーク編集からURLを編集。URLの「javascript」より前の文字を削除するとブックマークレットとして使えます

そうすると「開く」ボタンがあるページはそのまま。画面に変化なし。その代わり、バックグラウンドで「Opened」ページが開かれている。なので、一見何も動作していないように見えてしまう。
バックグラウンドで開いちゃう

本来は「Opened!」の画面が表示されなければならないはず。…Safariのバグだよなぁ。

ブックマークレットを使って様々なページをWebサービスに登録しているのですが、最近うまく動かない。なんだ?と思ったらこんなオチでした。iOS7のSafariは色々変なバグがあって本当困ります…。

Facebook / 広告
2013年10月07日 | Posted in Program2 Comments » 

関連記事

コメント2件

  • neran より:

    私も自前のオンラインブックマークなどブックマークレットから利用していたので、困っていましたが、以下の方法で、この問題はひとまず解消できるようです。

    1.ブックマークレットの登録先を「お気に入り」または自分で設定しているお気に入りフォルダにする
    2.動作させたいページでアドレスバーをタップし、表示されたブックマークレットを実行

    この場合は、window.openしたページにフォーカスされます。

  • wg koro より:

    おおお、こんな手があったのか!これだと問題なくフォーカスされますね。
    これまで微妙に不便で困ってたんですが、大変助かりました!ありがとうございます!!

  • コメントを残す

    メールアドレスが公開されることはありません。

    スパム対策のため、コメントする際は下記の計算式を埋めてください。 計算式の有効期限が切れました。計算式の隣にある再読み込みボタンを押してください。