By Hoshino

0

iTunes、App StoreへのリンクがSafariで開けないとき

Categories : Apple , JavaScript

iTunes(App Store)へのリンクを一括管理したいからリダイレクトさせてるんだけど
iPhoneのSafariからだと開けないなんてことがあります。aタグにtarget=”_blank”を設定してるとダメみたい。

じゃぁ外せばいいじゃん

と思われるかもですけど、
「はずすとサイトから離脱しちゃうじゃまいか」とか
「呪われているので外せません」的な理由があってはずせなかったり。

例としてかみあぷのWebサイト(http://www.appps.jp/)のリンクを見てみましょう。

マンガボックスのところのボタンアイコンの2つにiTunesへリダイレクトするリンクがついているのですが、
アイコンの方にはtarget=”_blank”が入っています。ですのでSafariでアイコンの方をタップすると、

ガショウィーン、サッ、ピタッと真っ白なページで止まってしまいます。
これはくまったくまった。売り上げにも影響しそうですね。

さてこれを半ば強引に解決する方法をさきほど発見しました。
独自にリダイレクトしている方用とbitlyなどの短縮URLを使ってる方用のがあります。

自分でリダイレクトしている場合の解決方法

PHPだったら、

header(“Location: https://itunes.apple.com/jp/hoge/id00000?mt=8&uo;=4&at;=XXXXX”);

みたいなことをやってると思うのでそのあとにJavaScript

function sleep(time) {
        var t1 = new Date().getTime();
        var t2 = new Date().getTime();
        while(t2 < t1 + time) {
                t2 = new Date().getTime();
        }
        return;
}
sleep(500);

を出力します。PHPだとこんな感じ

header(“Location: https://itunes.apple.com/jp/hoge/id00000?mt=8&uo;=4&at;=XXXXX”);
echo ‘<script>function sleep(time) {var t1 = new Date().getTime();var t2 = new Date().getTime();while (t2 < t1 + time) {t2 = new Date().getTime();}return;}sleep(500);</script>’;

OSを判定してiOSだけのときに出すと良いですね。

何をしているかというと0.5秒スレッドを停止させています。sleepって奴です。
新しくページを開いたあとにスレッドを少し停止させるとちゃんとiTunes、App Storeへ遷移するのです。

なぜかって?

知らないよーん。

さて次

短縮URLサービス使っているのでサーバーサイドいじれない場合の解決方法

最初にあげたかみあぷの例ですね。
aタグの中にonclickでこんなJavaScriptをしかけましょう。

<a href=”http://bit.ly/hoge” target=”_blank” onclick=”setTimeout(function(){ sleep(500); }, 100)”>App Storeへ!</a>

sleepは先ほど用意したものです。リンクをタップした後、
setTimeoutで0.1秒遅らせてから0.5秒スリープさせます。こうするとちゃんと遷移します。

なぜかって?

知らないよーん。

さぁこれでかみあぷもほんの少し売り上げが上がるはず。
お礼にあっきぃの作ったiPhoneアプリを取り上げてくださいな〜。

ではでは♪

※ご利用は自己責任でねっ