SEO対策やトラッキングなどの実装をケースが自分の制作でてくるようになりました。
それで、その場合にはSWFAddressのお世話になることも多いのですが、SWFAddressで初回表示時にアンカーが取得できない現象に見舞われたのでメモ。
現象
現象としてはこんな感じ。初期表示のときに#以降の値が取れないんです。
ちなみに正常な挙動はこれ。
これができないと、何が困る?
それは、1.html#testのようにパーマリンクでたどってきたユーザーに対しての復帰がまったく出来なくなってしまうこと。別のケースとしては、サイトマップがHTMLで作られてて飛んできたユーザーも再現ない。
こんな現象、コンテンツ佳境に出てくるとかなり泣きそうなことになる。
原因
Flash側を疑ったり、Flash内でも色々と読み込んでいるからそのタイミングかなとか、いろいろと現象を見てみたんですが、結局、Flashの中の書き方は問題がなくて、Javascriptの記述順が違ってたのが原因でした。
正しい挙動のJavaScriptでは以下のように書かれています。
<script language="javascript">AC_FL_RunContent = 0;</script>
<script src="js/AC_RunActiveContent.js" language="javascript"></script>
<script type="text/javascript" src="js/swfaddress.js"></script>
つづいて、初期表示のときに#以降の値が取れないサンプルでは順番が逆に書いています。
<script type="text/javascript" src="js/swfaddress.js"></script>
<script language="javascript">AC_FL_RunContent = 0;</script>
<script src="js/AC_RunActiveContent.js" language="javascript"></script>
たぶん、AC_RunActiveContent.js側のFlashタグの生成と、SWFAddress側のアンカーの値を保持する挙動が競合しあってうまく行ってないんだろう。
SWFAddress+SWFObjectのサンプルがいっぱいあってSWFAddress自体の把握には役に立ったのだけど、今のコンテンツでAC_RunActiveContent.jsを使ってたからイマイチ状況が特定できませんでした。
[参考文献]
Asual » SWFAddress
http://www.asual.com/swfaddress/
- Newer: プリントゴッコが販売終了に思う
- Older: Urchinの読み方はアーチン