2011.10.17 marionnettezero
今回は、自分の回にまにあったはずな marionnettezero です。
リリースラッシュで忙しいのですが、Twitter、Facebook、Mixi 等の API を頻繁に
使っております為、そのあたりのネタを記載していこうと思います。
iFrame で Facebook アプリとしてサイト公開する場合に、そのアプリ内で
そのサイトドメイン以外に Location しようとすると、Facebook の iFrame外からの
影響で、必ず Facebook のアイコン画像が表示され、それをクリックしないと Location
できないようになっています。
以下のようなソースだと必ずアイコン画像が出てしまいます。
この状態でもよしとされる場合もありますが、できる事ならスムーズに遷移したいですよね。
// facebook インスタンス生成 $facebook = new Facebook( array( 'appId' => SYSTEM_APP_ID, 'secret' => SYSTEM_APP_SECRET, 'cookie' => true ) ); // 認証されているか uid を取得する $uid = $facebook->getUser(); // 認証されていない場合 if (!$uid) { // 認証用URLの取得 $authorize_url = $facebook->getLoginUrl( array( 'canvas' => 1, 'fbconnect' => 0, 'redirect_uri' => SYSTEM_NEXT_LOCATION, 'display' => SYSTEM_APP_PAGE, 'scope' => 'offline_access,user_status,read_stream,status_update,publish_stream' ) ); // 認証用URLが取得できた場合は、ロケーションする if ($authorize_url) { header('Location:' . $authorize_url); } // 認証されている場合 } else { // アクセストークンを取得 $request['oauth_access_token'] = $facebook->getAccessToken(); // 自分の情報を取得 $me = $facebook->api('/me', 'GET', array('access_token' => $request['oauth_access_token'])); }
でも、解決策は意外と簡単です。
iFrame 外の JS から操作されるのであれば、こちらも JS で対抗すればいいのです。
こんな感じですね。
// 認証用URLが取得できた場合は、ロケーションする if ($authorize_url) { echo "<script type='text/javascript'>top.location.href = '$authorize_url';</script>; }
知らないと時間がかかるけど、知っていると以外と簡単な事。
不定期ですが、そんな TIPS をお送りしていきます。